无法从外部存储设备获取音频

时间:2019-12-09 17:56:12

标签: android android-studio

我正在开发一个简单的音乐播放器,但遇到了无法从SD卡获取音频文件的问题。我正在将模拟器 Nexus 5X API 28 Android 9.0 结合使用。

您可以看到sdcard /音乐中有一些mp3文件

enter image description here

我正试图借助这种方法来获取歌曲:

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"/>

0 个答案:

没有答案