java - 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" />
我复制的音乐文件如下:
- 通过设备文件资源管理器进入 /mnt/sdcard/Music(右键单击 -> 上传)
- 拖放到模拟器中,然后使用文件应用程序将它们从内部存储下载文件夹复制到 sdcard 音乐文件夹中
它们似乎都不起作用。我已阅读 mediastore 需要重新索引这些,并尝试了以下解决方案:
- 从 Android 虚拟设备管理器冷启动虚拟设备
- 在 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 开发新手
提前谢谢了!!
解决方案
尝试将此添加到应用程序标记中的 AndroidManifest.xml 文件中。
<application
.....
android:requestLegacyExternalStorage="true"
....
推荐阅读
- xcode - 如何在不同的网站上获取谷歌价格?
- flutter - 页面幻灯片过渡建议颤抖
- javascript - Sum Checked 单选按钮值不起作用
- ios - 如何为 iOS 创建 Rust 动态库(dylib)?
- kubernetes - 想要在 GKE 1.16.10-gke.8 中同一集群但不同命名空间的 Pod 之间进行通信
- graph-theory - 使用 Bellman Ford 进行负循环检测是否取决于起始节点的选择?
- raspberry-pi - 热敏打印机未在 /dev/usb/lp0 下的 Raspberry Pi 上列出
- r - 在 lapply 可选参数中使用 .data 代词两次
- c# - 如何在函数C#中添加数组类型参数
- kubernetes - Kubernetes 不会将 Pod 调度到工作量较少的节点上