1

我正在尝试编写应用程序,它列出了 sd 卡中的所有 mp3 文件。

String[] columns = new String[] {
            MediaStore.Audio.Media._ID,
            MediaStore.Audio.Media.TITLE,
            MediaStore.Audio.Media.TITLE_KEY,
            MediaStore.Audio.Media.DATA,
            MediaStore.Audio.Media.ALBUM,
            MediaStore.Audio.Media.ARTIST,
            MediaStore.Audio.Media.ARTIST_ID,
            MediaStore.Audio.Media.DURATION,
            MediaStore.Audio.Media.TRACK
    };

    String uristr_t = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.getPath();
    Cursor musicCursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                columns, null, null, null);

    if(musicCursor != null){
        mSongs = new ArrayList<SongInfo>( musicCursor.getCount());
        boolean isMediaFilesExist = musicCursor.moveToFirst();
                ...

sd 卡上有一些 mp3 文件,但 musicCursor.GetCount() 返回 0。我想路径不正确。EXTERNAL_CONTENT_URI 是content://media/external/audio/media,它的路径是:

/external/audio/media

但我的 sd 卡的路径是:

 /mnt/sdcard

我尝试手动设置 Uri:

String uriStr = "content://" + Environment.getExternalStorageDirectory().getPath();
Uri sdCardUri = Uri.parse(uriStr);
Cursor musicCursor = managedQuery(sdCardUri, columns, null, null, null);

在这种情况下,Uri 为content:///mnt/sdcard,但在 managedQuery 之后 musicCursor 为空。也许 uriStr 的格式不正确并且 Uri 初始化错误?谢谢!

4

1 回答 1

3

你的代码是正确的。路径 /external/audio/media 是内容提供程序路径,而不是实际文件系统的路径。您确定卡上有 MP3 文件吗?签入音乐应用程序,您可以看到文件。如果你不能在那里,我有时会发现(尤其是在模拟器上)索引并不总是运行。通过卸载 SD 卡并重新安装(设置/SD 卡和手机存储/卸载 SD 卡),强制 SD 重新索引所有媒体。

于 2011-04-12T09:10:39.670 回答