Intent.CATEGORY_APP_MUSIC с Intent.setDataAndType не возвращает результат - PullRequest
0 голосов
/ 21 октября 2018

У меня есть аудиофайл, который я хочу, чтобы приложение по умолчанию для устройства или любые другие установленные приложения, которые могут обрабатывать аудиофайлы, воспроизводят этот аудиофайл.Итак, у меня есть это:

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();
    }
}

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете попробовать это:

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);

File sdcard = Environment.getExternalStorageDirectory();
File audioFile = new File(sdcard.getPath() + "/Music/goodmorningandroid.mp3"); 
intent.setDataAndType(Uri.fromFile(audioFile), mimetype); //notice this line

Отредактировано : необходимы разрешения для чтения и записи SD-карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...