Я сканирую свою SD-карту на наличие аудиофайлов и сохраняю их пути к файлам. Это прекрасно работает. Позже я получаю информацию о пути к файлу для создания URI:

MediaPlayer mp = MediaPlayer.create(this, Uri.fromFile(new File(filepath)));

Однако это приводит к следующей ошибке:

I/System.out: URI: file:///storage/123A-45BC/Folder/Audio.mp3
E/MediaPlayerNative: error (1, -2147483648)
D/MediaPlayer: create failed:
    java.io.IOException: Prepare failed.: status=0x1

Вот в принципе и вся проблема. Далее следует лишь несколько других вещей, которые я пробовал, либо с теми же, либо с другими ошибками.

-) Пробовал создавать MediaPlayer и указывать пути к файлам так:

MediaPlayer mp = new MediaPlayer();
mp.reset();

try {
     mp.setDataSource(filepath);
     // or: mp.setDataSource(this, Uri.fromFile(new File(filepath)));
     mp.prepare();
}
catch ...

// This results in the same error.

-) И я попробовал с Uri.parse:

MediaPlayer mp = MediaPlayer.create(this, Uri.parse(filepath));

// Uri.parse results in an "java.io.FileNotFoundException: No content provider" error,
// unlike Uri.fromFile.
// This tells me that I am on the right track with Uri.fromFile.

-) Это проблема отсутствия прав пользователя? Я должен:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

File.exists() и file.canRead() возвращают true.

Любая помощь очень ценится, и заранее спасибо!

1
tbsn 9 Ноя 2019 в 00:13
Не используйте Uri. Просто попробуйте mp.setDataSource(filePath);.
 – 
blackapps
9 Ноя 2019 в 00:22
Я тоже пробовал, забыл добавить, извините!! Это тоже не работает...
 – 
tbsn
9 Ноя 2019 в 00:48
Хорошо... Я не могу избавиться от этой проблемы при попытке с эмулятором, но она исчезает при переносе приложения на реальное устройство. Я просто не ожидал там других результатов ... Тем не менее рад получить некоторые ответы о том, почему это так (потому что все остальное, что я делаю со сканированием SD-карт - виртуальных и реальных - работает хорошо). Но да, это что-то, я думаю...
 – 
tbsn
9 Ноя 2019 в 20:09
Вы нашли какое-либо решение для этого? У меня есть эта проблема даже в реальном устройстве.
 – 
Student
7 Окт 2021 в 14:50

1 ответ

Попробуйте создать Uri с шаблоном FileProvider:

FileProvider.getUriForFile(context, context.packageName + ".provider", file)```
0
Pepster 28 Окт 2020 в 22:41