我目前正在嘗試製作音頻媒體播放器。我目前正在運行棒棒糖。我遇到了爲媒體播放器設置dataSource的問題。首先,這裏是我如何設置DataSource:Android - 將URI轉換爲棒棒糖上的文件路徑
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之外的其他內容給dataSource。有什麼方法可以轉換棒棒糖上的URI,如果沒有,我怎麼才能提供數據源只知道歌曲的ID?謝謝。
「我做了一些研究,並從我的理解,在Android 4.1之後,你不能再使用數據源的URI「 - 請引用。如果有的話,反過來也是如此 - 你不能假定文件路徑會起作用。 「當我用上面的代碼運行這個應用時,我會得到這個錯誤」 - 如果你正在測試Android 4.4+,添加'READ_EXTERNAL_STORAGE'權限。 「似乎kitkat改變了URI的提供方式,因此很難從URI獲取文件路徑」 - 並不要求Uri是文件,更不用說可以訪問的文件了。 – CommonsWare
當然,我會看看我是否能找到我發現那個聲明的地方。我只是假定它是正確的,因爲我的URI不起作用。我具有READ_EXTERNAL_STORAGE權限以及INTERNET。 – user2082169
這裏是我閱讀URI的地方。我可能誤解了。他說,在Android 4.1.1上,如果使用傳入字符串的構造函數,則需要使用本地路徑。 http://stackoverflow.com/questions/16395559/mediaplayer-setdatasource-failed-with-status-0x80000000-for-ringtone-set-by-file/22152628#22152628 – user2082169