Я сканирую свою 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 ответ
Попробуйте создать Uri с шаблоном FileProvider:
FileProvider.getUriForFile(context, context.packageName + ".provider", file)```
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.
mp.setDataSource(filePath);
.