Проверить, доступно ли намерение

Я ищу способ проверить, могу ли я открыть определенное намерение. Я знаю, как проверить, доступно ли действие, подобное в этом примере . Однако этого недостаточно, так как действие типа 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"

http url довольно безопасен: он откроется в веб-браузере по умолчанию. URL-адрес ftp не так, поскольку он не уверен, что у пользователей установлен ftp-клиент (в моем случае я предполагаю, что AndFTP в качестве клиента, поскольку он является одним из самых популярных клиентов, и нет стандартного способа отправить un / 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;

5
задан Wouter 4 July 2011 в 16:01
поделиться