Я рассмотрел все подобные вопросы здесь, но я не могу для жизни меня понять, что я делаю неправильно.
Я написал приложение, которое пытается запустить различные файлы, вроде файлового браузера. Когда щелкнут файл, он пытается запустить программу на основе связанного с ней типа MIME или представляет диалоговое окно "Выберите приложение для запуска".
Вот код, который я использую для запуска:
File file = new File(app.mediaPath() + "/" +_mediaFiles.get(position));
Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW);
String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(file).toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
myIntent.setDataAndType(Uri.fromFile(file),mimetype);
startActivity(myIntent);
Это не работает и генерирует ошибку:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///file:/mnt/sdcard/roms/nes/Baseball_simulator.nes }
Теперь, если я, например, устанавливаю OI File Manager, он открывается вместо этой ошибки, а затем, если я нажму тот же самый файл изнутри, он запустит соответствующие диалоги.
Я заметил, что тип MIME для этого конкретного файла выходит из строя, но другие типы mime, такие как .zip
, возвращают значения.
Мне не хватает чего-то, когда тип MIME имеет значение null, чтобы вызвать диалог, который позволяет пользователю выбрать?
Я пробовал другие варианты запуска приложения, в том числе не устанавливать тип MIME и использовать .setData
без успеха.
Действие, которое я хочу выполнить, - это щелчок пользователя по файлу, если он связан с приложением, запускаемым приложением, если нет, то пользователь получает диалоговое окно "Полное действие с помощью" со списком приложений.
Спасибо за любой совет.