首页 > 解决方案 > Android 模拟器找不到音乐播放器应用的音频文件

问题描述

我正在开发一个简单的音乐播放器应用程序,并按如下方式查询内容解析器:

        ContentResolver contentResolver = getContentResolver();

        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
        String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
        Cursor cursor = contentResolver.query(uri, null, selection, null, sortOrder);

        audioList = new ArrayList<>();
        Log.d("CURSOR IS NULL", (cursor != null) ? "FALSE": "TRUE");
        Log.d("CURSOR COUNT", String.valueOf(cursor.getCount()));
        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                String data = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));

                // Save to audioList
                audioList.add(new Audio(data, title, album, artist));
                Log.d("DEBUG TITLE", title);
            }
        }
        cursor.close();

我在这个网站上看到了很多类似的问题,但没有一个解决方案对我有用。它始终为 getCount() 报告值 0。我的 Android 清单具有以下权限(我知道在这种情况下不需要写入):

    <!-- allow storage access -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我复制的音乐文件如下:

  1. 通过设备文件资源管理器进入 /mnt/sdcard/Music(右键单击 -> 上传)
  2. 拖放到模拟器中,然后使用文件应用程序将它们从内部存储下载文件夹复制到 sdcard 音乐文件夹中

它们似乎都不起作用。我已阅读 mediastore 需要重新索引这些,并尝试了以下解决方案:

  1. 从 Android 虚拟设备管理器冷启动虚拟设备
  2. 在 adb shell 中运行以下命令
for ANDROID_MEDIA in $(find /mnt/sdcard/Music/*.mp3); 
do am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "${ANDROID_MEDIA}"; done

哪个报告

Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=/mnt/sdcard/Music/bensound-betterdays.mp3 flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=/mnt/sdcard/Music/bensound-dubstep.mp3 flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=/mnt/sdcard/Music/bensound-epic.mp3 flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=/mnt/sdcard/Music/bensound-funnysong.mp3 flg=0x400000 }
Broadcast completed: result=0
Broadcasting: Intent { act=android.intent.action.MEDIA_SCANNER_SCAN_FILE dat=/mnt/sdcard/Music/bensound-sunny.mp3 flg=0x400000 }
Broadcast completed: result=0

我可以从 Files 应用程序或 Youtube 音乐中自由播放这些音乐文件,但我的应用程序无论如何都找不到它们。有人可以告诉我是否缺少任何东西吗?我是 Android 开发新手

提前谢谢了!!

标签: javaandroidaudio

解决方案


尝试将此添加到应用程序标记中的 AndroidManifest.xml 文件中。

<application
.....
  android:requestLegacyExternalStorage="true"
....

推荐阅读