总结:检测系统中是否有Activity可以使用Intent的方法——Can I Use this Intent?
以下方法检测检测系统中是否有Activity可以使用Intent的方法:
/**
* 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;
}
接下来使用以上这个帮助方法来检测系统中是否安装了二维识别码的软件,若没有安装则菜单呈灰色不可选状态:
@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);
return super.onPrepareOptionsMenu(menu);
}
以上这种技术也常被用于在应用启动时提醒用户是否安装缺失包,你可以使用该技术将用户直接重定向上Android Market.
详情请见:
http://developer.android.com/resources/articles/can-i-use-this-intent.html