В настоящее время я пытаюсь сделать медиаплеер для аудио. В настоящее время я использую леденец. У меня возникла проблема с настройкой dataSource для медиаплеера. Во-первых, вот как я устанавливаю DataSource:Android - конвертировать URI в путь к файлу на lollipop
public void playSong() {
player.reset();
Song selSong = songs.get(songPos);
long currSong = selSong.getId();
//Get Uri of song
Uri trackUri = ContentUris.withAppendedId(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, currSong);
try {
//Tell the player the song to play
player.setDataSource(getApplicationContext(), trackUri);
} catch (Exception e) {
Log.e("MUSIC SERVICE", "Error setting data source", e);
Log.d("URI Path", trackUri.toString());
}
//Will prepare the song and call onPrepare of player
player.prepareAsync();
}
И Uri выходит так:
content://media/external/audio/media/22
Я сделал некоторые исследования, и от моего понимания, после того, как Android 4.1, вы можете больше не используйте URI для источника данных. Когда я запускаю это приложение с кодом выше, я получаю эту ошибку:
E/MediaPlayer﹕ Unable to create media player
E/MUSIC SERVICE﹕ Error setting data source
java.io.IOException: setDataSource failed.: status=0x80000000
at android.media.MediaPlayer.nativeSetDataSource(Native Method)
Так что теперь мне нужно, чтобы преобразовать URI в путь к файлу и предусмотреть, что в качестве источника данных. И, после дополнительных исследований, кажется, что kitkat изменил способ предоставления URI, поэтому его трудно получить путь к файлу из URI. Тем не менее, я не уверен, что это изменение сохранилось в Android Lollipop 5.0.2.
По существу, у меня есть URI песни, но мне нужно предоставить что-то иное, чем URI для источника данных. Есть ли способ, которым я могу преобразовать URI на Lollipop, и, если нет, как я могу предоставить dataSource только знать идентификатор песни? Благодарю.
«Я провел некоторое исследование и из своего понимания , после Android 4.1 вы больше не сможете использовать URI для dataSource "- цитата, пожалуйста. Во всяком случае, обратное верно - вы не можете предположить, что путь к файлу будет работать. «Когда я запустил это приложение с приведенным выше кодом, я получу эту ошибку» - если вы тестируете Android 4.4+, добавьте разрешение «READ_EXTERNAL_STORAGE». «похоже, что kitkat изменил способ предоставления URI, поэтому его трудно получить путь к файлу из URI» - нет требования, чтобы 'Uri' был файлом, не говоря уже о том, к которому вы можете получить доступ. – CommonsWare
Конечно, я посмотрю, смогу ли найти, где я нашел это заявление. Я просто предположил, что это правильно, поскольку мой URI не работал. У меня есть разрешение READ_EXTERNAL_STORAGE, а также INTERNET. – user2082169
Вот где я читаю, что URI не будет работать. Возможно, я неправильно понял. Он говорит, что на Android 4.1.1 вам нужно использовать локальный путь, если вы используете конструктор, который проходит в String. http://stackoverflow.com/questions/16395559/mediaplayer-setdatasource-failed-with-status-0x80000000-for-ringtone-set-by-file/22152628#22152628 – user2082169