Intereting Posts
Android Studio: используйте AndroidAnnotations Ошибка Android Studio: Ошибка: CreateProcess error = 216, эта версия% 1 несовместима с версией Windows, в которой вы работаете Как вызвать вкладку Onclick и OnTabChange для одной вкладки Android: LayoutParams для TextView делает вид исчезающим, программным ExpandableListView внутри ExpandableListView GetActionBar (). SetDisplayHomeAsUpEnabled (true) выбрасывает NullPointerException Разница между targetSdkVersion и целью построения проекта Проблема с датчиком приближения Android только в устройствах Samsung Android: Тип java.awt.Image не может быть разрешен. Это косвенно ссылается на требуемые файлы .class Изменение размера предварительного просмотра камеры Изображение из галереи в Android 6 (Marshmallow) Как написать приложение для Android для чтения / записи sysfs? Google на выбор не запускается на телефонах Android Mi Java.lang.illegalstateexception не смог найти метод (представление) в фрагменте андроида класса активности Получить onPause & onResume как события на уровне приложений / задач

Как проверить, может ли какое-либо намерение быть обработано из какой-либо деятельности?

У меня есть этот метод до сих пор, но он появился, как будто чего-то не хватает

Например, у меня есть файл /sdcard/sound.3ga, который возвращает false (например, нет активности, которая может обрабатывать этот тип файла), но когда я открываю его из файлового менеджера, он открывается с медиаплеером без проблем

Я думаю, что это намерение не является полным, и мне нужно что-то еще, чтобы убедиться, что переменная handlerExists будет ложной ТОЛЬКО, если нет активности, которая могла бы справиться с этим намерением

PackageManager pm = getPackageManager(); Intent intent = new Intent(android.content.Intent.ACTION_VIEW); String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uriString)).toString()); String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); intent.setDataAndType(Uri.fromFile(new File(uriString)),mimetype); boolean handlerExists = intent.resolveActivity(pm) != null; 

Solutions Collecting From Web of "Как проверить, может ли какое-либо намерение быть обработано из какой-либо деятельности?"

 PackageManager manager = context.getPackageManager(); List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0); if (infos.size() > 0) { //Then there is an Application(s) can handle your intent } else { //No Application can handle your intent } 

Вы пробовали это?

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(yourFileHere)); 

Решение edwardxu отлично работает для меня.

Чтобы немного уточнить:

 PackageManager packageManager = getActivity().getPackageManager(); if (intent.resolveActivity(packageManager) != null) { startActivity(intent); } else { Log.d(TAG, "No Intent available to handle action"); } 
 if (intent.resolveActivity(pm) == null) { // activity not found } 

Вы можете использовать:

 public static boolean isAvailable(Context ctx, Intent intent) { final PackageManager mgr = ctx.getPackageManager(); List<ResolveInfo> list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; }