我正在开发一个简单的音乐播放器应用程序,并按如下方式查询内容解析器:
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" />
我已复制音乐文件如下:
它们似乎都不起作用。我读到媒体存储需要重新索引这些,并尝试了以下解决方案:
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 开发新手
提前非常感谢!
尝试将其添加到 AndroidManifest.xml 文件中的 application 标记中。
<application
.....
android:requestLegacyExternalStorage="true"
....
从内存读取文件时我遇到了类似的问题(没有出现在应用程序上)。
就我而言。 (解决方案)--> 我将 SD 卡设置为我的附加存储。这是虚拟设备电话上的通知,然后我被引导完成整个过程。 我认为也可以从虚拟设备电话 --> 设置 --> 存储访问它。
!另外,请确保您的虚拟内存中有您想要的文件(例如:照片、音乐)(例如:来自设备资源管理器 /sdcard 或 /musics )。或从您的计算机将其上传到 SD 卡(从设备资源管理器!)
!此外,请注意您适当的权限和 API 级别(Android 10 以下和以上)。
我希望它可以帮助别人:)