检查意图 uri 是不是可用

Posted

技术标签:

【中文标题】检查意图 uri 是不是可用【英文标题】:Check if intent uri is available检查意图 uri 是否可用 【发布时间】:2011-10-26 09:02:35 【问题描述】:

我有一个有时会链接到 imdb 的应用程序。我可以使用http://m.imdb.com/find 或如果它可用imdb:///find 来做到这一点。我的麻烦是我找不到方法来检查imdb:// 是否可用,以免为时已晚。

因为链接是用户点击的,我无法捕捉到android.content.ActivityNotFoundException异常。

我是否遗漏了一些明显的东西?


解决方案:

根据 inazaruk 的建议,我现在使用以下代码:

public static boolean isUriAvailable(Context context, String uri) 
    Intent test = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
    return context.getPackageManager().resolveActivity(test, 0) != null;

必须使用您请求的直接 uri 调用该方法,例如 imdb:///find 而不仅仅是 imdb://

【问题讨论】:

是否可以从 imdb 活动中获取数据?我的意思是,获得例如电影的评分或其他信息可能会很棒。 【参考方案1】:

您可以使用resolveActivity() 来检测系统中是否有任何Activity 能够处理您的意图。当然,您需要构建模仿“uri”点击的意图。这可以使用 Intent.setData() 函数来完成,尽管我自己没有测试/验证。

【讨论】:

我试过Intent test = new Intent(Intent.ACTION_VIEW, Uri.parse("imdb://find"));getPackageManager().resolveActivity(test, 0);,但它甚至没有在adb日志中提及。 日志中可能不会提及,由实现决定。但是,您可以添加自己的日志。只需打印来自 resolveActivity() 自己在 ResolveInfo 实例中返回的信息。 谢谢,我以为它会抛出异常。像魅力一样工作。【参考方案2】:

以下对我有用:

    Intent intent = new Intent();
    intent.setAction("android.intent.action.VIEW");
    Uri uri = Uri.parse("imdb:///title/tt1457767/");
    intent.setData(uri);
    this.getActivity().startActivity(intent);

您可以将Uri.parse("");中的字符串替换为以下任何一种:

            imdb:///name/<nameID>
            imdb:///find?q=<search_query>
            imdb:///title/<titleID>
            imdb:///boxoffice
            imdb:///name/<nameID>
            imdb:///find?q=toystory

【讨论】:

以上是关于检查意图 uri 是不是可用的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是有应用程序在监听我的意图

检查是不是有默认应用程序的选择器意图

检查 Uri 是不是以“http://”或“https://”开头

Google Play 服务:如何检查当前是不是有注册到位置更新/活动识别的“活动”挂起意图回调?

检查 localStorage 是不是可用

如何(快速)检查 UNC 路径是不是可用