Проверьте, доступно ли намерение - PullRequest
5 голосов
/ 04 июля 2011

Я ищу способ проверить, могу ли я открыть определенное намерение. Я знаю, как проверить, доступно ли действие, например в этом примере . Однако этого недостаточно, поскольку действие вроде Intent.ACTION_VIEW может открывать различные приложения в зависимости от представленного URI.

Точка в случае:

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url);
startActivity(i);

Откроется другое приложение для разных URL, например:

url = "ftp://192.168.1.1"
url = "http://192.168.1.1"

URL-адрес http довольно безопасен: он открывается в веб-браузере по умолчанию. URL-адрес ftp не так, так как он не уверен, что у пользователей установлен клиент ftp (в моем случае я принимаю AndFTP в качестве клиента, так как он кажется одним из самых популярных клиентов, и стандартного способа отправки / pw клиенту, так что это должно быть специфично для приложения).

Так что теперь я хотел бы проверить не только, доступно ли действие (связанный код вернет true, если http доступен, но ftp нет), но также и существует ли приложение, которое может обрабатывать определенное разнообразие. Тестирование для конкретного приложения также будет приемлемым.

И, наконец, это должно быть включено в фрагмент кода, который выбирает один или несколько URI на выбор, который должен открывать первый возможный код и возвращать код ошибки, если URI не могут быть открыты. Примерно такой псевдокод:

success = false;
for (Uri uri : uris) {
   if (actionAvailable(uri)) {
        // set up intent
        startActivity(intent);
        success = true;
        break;
    }
}
return success;

1 Ответ

9 голосов
/ 04 июля 2011

Так что теперь я хотел бы проверить не только, доступно ли действие (связанный код вернет true, если http доступен, но ftp нет), но также и существует ли приложение, которое может обрабатывать определенное разнообразие.

Как указывает @mibollma, используйте PackageManager и queryIntentActivities(), указав Intent, который вы хотите использовать с startActivity(), вместе с вашим URL. Если queryIntentActivities() возвращает пустой список, вы знаете, что для этого Intent нет соответствия. Например, если ничто не имеет <intent-filter>, поддерживающего схему ftp, вы получите пустой список.

для моего случая я принимаю AndFTP в качестве клиента, так как он кажется одним из самых популярных клиентов, и не существует стандартного способа отправки un / pw клиенту, поэтому это должно быть специфично для приложения

Тогда не поддерживает FTP. Или добавьте свою собственную поддержку FTP, а не полагайтесь на несуществующее, несовместимое стороннее приложение.

...