【问题标题】: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 活动中获取数据?我的意思是,获得例如电影的评分或其他信息可能会很棒。

标签: android android-intent 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

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 2019-10-11
    • 2019-07-11
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2014-04-03
    相关资源
    最近更新 更多