Android 模拟器无法找到音乐播放器应用程序的音频文件

问题描述 投票:0回答:2

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

        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. 拖放到模拟器中,然后使用“文件”应用程序将它们从内部存储的“下载”文件夹复制到 SD 卡的“音乐”文件夹中

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

  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

我可以从“文件”应用程序或 Youtube 音乐中自由播放这些音乐文件,但我的应用程序无论如何都找不到它们。有人可以告诉我我是否遗漏了什么吗?我是 Android 开发新手

提前非常感谢!

java android audio
2个回答
0
投票

尝试将其添加到 AndroidManifest.xml 文件中的 application 标记中。

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

0
投票

从内存读取文件时我遇到了类似的问题(没有出现在应用程序上)。

就我而言。 (解决方案)--> 我将 SD 卡设置为我的附加存储。这是虚拟设备电话上的通知,然后我被引导完成整个过程。 我认为也可以从虚拟设备电话 --> 设置 --> 存储访问它。

!另外,请确保您的虚拟内存中有您想要的文件(例如:照片、音乐)(例如:来自设备资源管理器 /sdcard 或 /musics )。或从您的计算机将其上传到 SD 卡(从设备资源管理器!)

!此外,请注意您适当的权限和 API 级别(Android 10 以下和以上)。

我希望它可以帮助别人:)

© www.soinside.com 2019 - 2024. All rights reserved.