这篇文章描述了一种可以使你发现系统是否安装可以处理你intent的app,下面这个例子展示了通过查询系统package manager来决定是否存在app来响应一个指定的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 packageis
* 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);
}
In thisexample, the menu is grayed out if the BarcodeScanner application is not installed.
或者更简单的是抛出ActivityNotFoundException,这项技术可以用在app启动的时候询问用户是否安装缺失组件,你可以通过适当的URI简单地导航到market。