托管查询的问题

时间:2011-04-12 08:40:23

标签: android cursor mediastore

我正在尝试编写应用程序,它列出了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为null。也许uriStr的格式不正确并且Uri初始化是错误的? 谢谢!

1 个答案:

答案 0 :(得分:3)

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