/**
 * Indicates whether the specified action can be used as an intent. This
 * method queries the package manager for installed packages that can
 * respond to an intent with the specified action. If no suitable package is
 * found, this method returns false.
 *
 * @param context The application's environment.
 * @param action The Intent action to check for availability.
 *
 * @return True if an Intent with the specified action can be sent and
 *         responded to, false otherwise.
 */

public static boolean isIntentAvailable(Context context, String action) {
   
final PackageManager packageManager = context.getPackageManager();
   
final Intent intent = new Intent(action);
   
List<ResolveInfo> list =
            packageManager
.queryIntentActivities(intent,
                   
PackageManager.MATCH_DEFAULT_ONLY);
   
return list.size() > 0;

}


http://android-developers.blogspot.kr/2009/01/can-i-use-this-intent.html

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
   
final boolean scanAvailable = isIntentAvailable(this,
       
"com.google.zxing.client.android.SCAN");

   
MenuItem item;
    item
= menu.findItem(R.id.menu_item_add);
    item
.setEnabled(scanAvailable);

// 사용 불가능 할 때 disable

   
return super.onPrepareOptionsMenu(menu);
}


찾아보니 카카오톡에서도 이와 비슷한 코드를 사용하였네요.

String KakaoLinkURLBaseString = "kakaolink://sendurl";

public boolean isAvailableIntent() {

Uri kakaoLinkTestUri = Uri.parse(KakaoLinkURLBaseString);

Intent intent = new Intent(Intent.ACTION_SEND, kakaoLinkTestUri);

List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

if (list == null)

return false;

return list.size() > 0;

}


// 이건 참고용

public boolean isAvailableIntent(String url) {

   System.out.println("isAvailableIntent = " + url);

        Uri LinkTestUri = Uri.parse(url);

        Intent intent = new Intent(Intent.ACTION_VIEW, LinkTestUri);

        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

        if( list != null) {

            for(int i = 0 ; i < list.size(); i++){

                ResolveInfo info = list.get(i);

                System.out.println(info.activityInfo);

            }

        }


        return list.size() > 0;

    }



어플 정보 가져오기

private void showShareAvailableApps() {

    final PackageManager packageManager = this.getApplicationContext().getPackageManager();      

    Intent intent = new Intent(Intent.ACTION_MAIN, null);

    intent.addCategory(Intent.CATEGORY_LAUNCHER);      

    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 

                            PackageManager.MATCH_DEFAULT_ONLY);         

    for (ResolveInfo info : list) {

        String appActivity      = info.activityInfo.name;

        String appPackageName   = info.activityInfo.packageName;

        String appName          = info.loadLabel(packageManager).toString();

        Drawable drawable = info.activityInfo.loadIcon(packageManager);

        Logger.d(TAG, "appName : " + appName + ", appActivity : " + appActivity 

                    + ", appPackageName : " + appPackageName);

    }

}


Posted by [czar]
,