检查意图 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://”开头