播放MediaStore.Audio.Media条目

时间:2019-07-11 06:51:40

标签: android

我正在编写一个可以播放MediaStore.Audio.Media.EXTERNAL_CONTENT_URI中存在的所有音频文件的应用程序。 这是我到目前为止的内容:

    String[] projection = {MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.DISPLAY_NAME,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.DATA};
    Cursor cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                    projection,
                    null,
                    null,
                    null);

    while (cursor.moveToNext()) {
        String uri = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));

        // Use uri to play music...

    }

这很好用。通过将uri传递给MediaPlayer,我可以播放音频。 但是...

  1. MediaStore.Audio.Media.DATA不保证持有uri。据我了解,它绝对可以容纳任何东西。
  2. MediaStore.Audio.Media.DATA已过时。

有没有办法在不依赖MediaStore.Audio.Media.DATA的情况下在外部存储中播放音频项目?

1 个答案:

答案 0 :(得分:0)

是的。 您可以简单地用ContentUris.withAppendedId播放它,因为MediaPlayer具有method可以播放Uri的内容。 例如,在这里,我正在设置歌曲Uri。

/// Helper function
public static Uri getSongUri(int songId) {
   return ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, songId);
}

/// And then...
public void setUri(Context appContext, int songId) {
    // ....
    player.setDataSource(appContext, getSongUri(songId));
    // ....
}