Can I Use this Intent?

本文介绍了一个实用的方法,用于检查Android系统中是否存在可以响应特定Intent的Activity。通过此方法,开发者可以判断设备上是否已安装所需的App,从而实现智能提示用户等功能。
总结:检测系统中是否有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
1013 1014 /** 1015 * Perform the operation associated with this PendingIntent, allowing the 1016 * caller to specify information about the Intent to use and be notified 1017 * when the send has completed. 1018 * 1019 * <p>For the intent parameter, a PendingIntent 1020 * often has restrictions on which fields can be supplied here, based on 1021 * how the PendingIntent was retrieved in {@link #getActivity}, 1022 * {@link #getBroadcast}, or {@link #getService}. 1023 * 1024 * @param context The Context of the caller. This may be null if 1025 * <var>intent</var> is also null. 1026 * @param code Result code to supply back to the PendingIntent's target. 1027 * @param intent Additional Intent data. See {@link Intent#fillIn 1028 * Intent.fillIn()} for information on how this is applied to the 1029 * original Intent. Use null to not modify the original Intent. 1030 * If flag {@link #FLAG_IMMUTABLE} was set when this pending intent was 1031 * created, this argument will be ignored. 1032 * @param onFinished The object to call back on when the send has 1033 * completed, or null for no callback. 1034 * @param handler Handler identifying the thread on which the callback 1035 * should happen. If null, the callback will happen from the thread 1036 * pool of the process. 1037 * @param requiredPermission Name of permission that a recipient of the PendingIntent 1038 * is required to hold. This is only valid for broadcast intents, and 1039 * corresponds to the permission argument in 1040 * {@link Context#sendBroadcast(Intent, String) Context.sendOrderedBroadcast(Intent, String)}. 1041 * If null, no permission is required. 1042 * @param options Additional options the caller would like to provide to modify the sending 1043 * behavior. May be built from an {@link ActivityOptions} to apply to an activity start. 1044 * 1045 * @throws CanceledException Throws CanceledException if the PendingIntent 1046 * is no longer allowing more intents to be sent through it.翻译
09-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值