Can I use this Intent?

Android提供了非常强大且容易使用的工具:Intents(意图)。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显示,阻止用户去操作。这个方法同样也可以在程序启动时,询问用户是否愿意去安装此缺失的应用,如果同意,你可以通过合适的URI地址引导他到应用市场去下载。

原文出处:Can I use this Intent?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 注:本文完全拷贝自https://developer.android.com/guide/components/i...
    RxCode阅读 5,784评论 1 13
  • (1)闹钟 创建闹钟(ACTION_SET_ALARM)示例Intent: 注:为了调用ACTION_SET_AL...
    sunnygarden阅读 5,631评论 0 10
  • Intent Intent介绍 Intent是Android应用组件之间通信的消息对象,它通常表明了两个通信组件的...
    whyles阅读 3,462评论 0 4
  • 我是个公众号,今天是2016年8月10日,情人节。 朋友圈比我早起床,在唱“分手快乐”。 我看向...
    0442d90f435e阅读 2,924评论 0 3
  • 备战了好久的概率论考试结束,看着试卷本以为会有一个不错的成绩,可是看着那67的成绩,我傻眼了。这么几天的努...
    一心一人一城阅读 845评论 0 0