我能使用这个Intent吗?

 

Android提供了一个非常强大且易于使用的消息类型:Intent。你可以使用Intent来将应用程序变成一个高级的库,而且可以使代码模块化并可重用。例如,Android Home画面和AnyCut应用程序,使用Intent来创建快捷方式。

能够使用这么低耦合的API固然很好,但是,无法保障你发出的Intent能够被其它应用程序接收。这种情况一般在第三方程序中发生,像Panoramio和它的RADAR Intent

这篇文章将描述一个技巧,通过这个技巧可以判断出系统中是否有应用程序能响应你想使用的Intent。下面的例子给出了一个辅助的方法,它能通过Package Manager查询系统中是否有app能响应特定的Intent。你的应用程序程序可以传入一个Intent到这个方法中,然后,显示或隐藏用户可能会去触发这个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);
}

在这个例子中,如果Barcode Scanner应用程序未安装的话,菜单项是置灰的。

另外,简单一些的方式是调用startActivity()时捕获ActivityNotFoundException异常,但这种方式只能在问题发生时进行处理,而不能事先相应地更新UI,且不能阻止用户做无用的动作。这里描述的技巧还可以在启动的时候询问用户是否要安装缺少的Package,然后,通过相应的URI,引导用户去Android Market下载。

 

xirihanlin 译于2010.04.08   

 

转载于:https://www.cnblogs.com/xirihanlin/archive/2010/04/12/1710163.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值