У меня есть аудиофайл, который я хочу, чтобы приложение по умолчанию для устройства или любые другие установленные приложения, которые могут обрабатывать аудиофайлы, воспроизводят этот аудиофайл.Итак, у меня есть это:
private void playMedia(String mediaPath) {
try {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_APP_MUSIC);
String extension = FilenameUtils.getExtension(mediaPath);
String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
intent.setDataAndType(Uri.parse(mediaPath), mimetype);
startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
Если я не установлю setDataAndType
, два моих игрока ответят,
Но если я установлю setDataAndType
:
ActivityNotFoundException: не найдено действие для обработки Intent {act = android.intent.action.MAIN cat = [android.intent.category.APP_MUSIC] dat = / storage / emulated / 0 / Audio.mp3 typ = audio / mpeg
На устройстве, над которым я работаю (API 24), есть несколько игроков, таких как mxPlayer,playerPro,shareIt Music,google play music,default player ...
Я что-то здесь не так делаю?
ОБНОВЛЕНИЕ(Окончательный ответ)
По предложенному принятому ответу я попытался с файлом, поэтому рабочий код:
private void playMedia() {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
String extension = FilenameUtils.getExtension(inPath);
String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
String type = null;
try {
type = mimetype.split("/")[0].toLowerCase().trim();
} catch (Exception e) {
e.printStackTrace();
}
if (type==null)
type="*";
File file = new File(inPath);
intent.setDataAndType(Uri.fromFile(file), type+"/*");
startActivity(Intent.createChooser(intent, FilenameUtils.getBaseName(inPath)));
} catch (Exception e) {
e.printStackTrace();
}
}