我正在开发一个简单的音乐播放器,但遇到了无法从SD卡获取音频文件的问题。我正在将模拟器 Nexus 5X API 28 与 Android 9.0 结合使用。
您可以看到sdcard /音乐中有一些mp3文件
我正试图借助这种方法来获取歌曲:
public void getSongList() {
Cursor musicCursor = getContentResolver()
.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
if (musicCursor != null && musicCursor.moveToFirst()) {
//get columns
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
}
游标不为null,但为空,因为它在moveToFirst()
方法上失败。我搜索了很多关于SO的帖子,但仍然找不到合适的解决方案。我想我可能在错误的目录中搜索,因为所有代码都可以工作。希望你能帮助我。
更新
在MainActivity中的onCreate()中进行权限检查:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
return;
}
}
Manifest.xml中的权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>