我正在尝试编写应用程序,它列出了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初始化是错误的?
谢谢!
答案 0 :(得分:3)
您的代码是正确的。 path / external / audio / media是内容提供者路径,而不是实际文件系统中的路径。 你确定卡上有MP3文件吗?检查音乐应用程序,您可以看到文件。如果你不能在那里,我有时会发现(特别是在模拟器上)索引并不总是运行。通过卸载SD卡并重新安装(设置/ SD卡和手机存储/卸载SD卡),强制SD重新编制所有媒体的索引。