检查intent uri是否可用

发布于 2024-11-29 07:15:20 字数 657 浏览 2 评论 0原文

我有一个有时会链接到 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://

I have an app that sometimes links to imdb. I can do this with http://m.imdb.com/find or if it is available imdb:///find. My trouble is I can't find a way to check whether the imdb:// is available before it is too late.

Because the link is clicked on by the user, I can't catch the android.content.ActivityNotFoundException exception.

Am I missing something obvious?


Solution:

By inazaruk's suggestion I'm now using the follwing code:

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;
}

The method must be called with a direct uri to what you are requesting, like imdb:///find rather than just imdb://.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怂人 2024-12-06 07:15:20

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

You can use resolveActivity() to detect whether there is any Activity in the system capable of handling your intent. Of course you need to construct the intent that mimics the "uri" click. That might be done using Intent.setData() function, though I didn't test/verify that myself.

恋竹姑娘 2024-12-06 07:15:20

以下对我有用:

    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(""); 中的 String 替换为以下任何内容:

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

Following worked for me:

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

You can replace String in Uri.parse("");with any of followings:

            imdb:///name/<nameID>
            imdb:///find?q=<search_query>
            imdb:///title/<titleID>
            imdb:///boxoffice
            imdb:///name/<nameID>
            imdb:///find?q=toystory
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文