Проверьте, доступно ли намерение URI - PullRequest
13 голосов
/ 13 августа 2011

У меня есть приложение, которое иногда ссылается на imdb.Я могу сделать это с http://m.imdb.com/find или, если он доступен imdb:///find.Моя проблема в том, что я не могу найти способ проверить, доступен ли imdb://, пока не стало слишком поздно.

Поскольку пользователь нажимает на ссылку, я не могу поймать android.content.ActivityNotFoundExceptionисключение.

Я что-то упускаю из виду?


Решение:

По предложению Иназарука я сейчас использую следующий код:

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://.

Ответы [ 2 ]

15 голосов
/ 13 августа 2011

Вы можете использовать resolveActivity(), чтобы определить, есть ли в системе Activity, способный справиться с вашими намерениями.Конечно, вам нужно создать намерение, которое имитирует щелчок «uri».Это можно сделать с помощью функции Intent.setData(), хотя я сам не проверял / не проверял это.

0 голосов
/ 01 августа 2015

Следующее сработало у меня:

    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
...