我使用下面的代码来获取所有的音频文件(实际上是它们的ID,所以我可以在以后用MediaPlayer
发挥他们)从一个目录Android设备上:在Android上获取目录中的所有音频文件?
ContentResolver cr = context.getContentResolver();
Uri audioUri = MediaStore.Audio.Media.getContentUriForPath(dir.getPath()); //dir is a File object representing the dir I'm looking in
Cursor audioCursor = cr.query(audioUri, null, null, null, null);
if (audioCursor != null && audioCursor.moveToFirst()) {
int idColumn = audioCursor.getColumnIndex(MediaStore.Audio.Media._ID);
List<Long> fileIds = new ArrayList<>();
do {
long id = audioCursor.getLong(idColumn);
fileIds.add(id);
} while (audioCursor.moveToNext());
return fileIds;
} else {
return null;
}
然而对于某种原因,它返回一个有2904个ID的数组,用于我给它的任何目录。我猜测我的设备上有2904个音频文件(当我使用Uri audioUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
时,它也返回2904个ID)。所以看起来我错误地使用了getContentUriForPath
,但是android reference没有提供任何信息。
这应该如何工作?
关于我想要做什么的一些更多信息(如果它在您的答案中有所不同):我仍在研究代码,尝试不同的事情。最终我想用MediaPlayer
播放这些文件。我只需要直接在该文件夹中的音频文件,忽略任何子文件夹。它们也应该按文件名进行排序。
啊哈,是有道理的。这确实解释了为什么我只是得到了一切。他们应该真的把这个添加到文档中。也非常感谢代码,我想我已经开始理解这个查询和光标的东西:D –
好吧,终于到处去测试它。虽然我必须确保我的“路径”变量以“/”结尾,但当我使用'dir.getPath()'时,它不起作用。谢谢! (对不起,btw不接受你的答案,错了,并没有立即注意到。) 但是,我用这个来制作一个音频书应用程序,所以我想添加一个'.nomedia'文件放到有声读物的根文件夹中(所以其他音乐播放器不会将它们仅显示为音乐文件),但是然后contentResolver无法再找到它的文件,这是有道理的。但是有没有办法解决这个问题? –