android怎么知道协议可以处理?

时间:2011-10-15 13:43:18

标签: android

我系统中的一个应用程序可以处理像“weibo:// abc”这样的URI,我想使用此URI启动意图。但是在启动这个URI之前的其他机器中我需要检查这个URI是否可以正确处理(没有大的延迟),我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以使用PackageManager.queryIntentActivities()获取可以处理此Intent的活动列表。

以下代码检查是否可以处理意图。它来自Android开发人员“Can I Use This 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;
}

像这样使用它:

if (isIntentAvailable(MyActivity.this,"weibo://abc"){
   //safe to startActivity here
} else {
   //no receiver for this activity
}

答案 1 :(得分:0)

也许我错了,但为什么可以认为Android可以自动处理它?

如果我对您的需求没有错,我的回答是使用this微博SDK查看URI是否正常,那么您无需考虑Android是否有支持。

答案 2 :(得分:0)

我可能会选择“吮吸它并看到”方法。拨打电话,看看你得到了什么。无论如何,你必须处理错误情况,我会添加一些在没有可用于处理意图的应用程序时触发的内容。