/**
* 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);
}
}