我使用下面的代碼來獲取所有的音頻文件(實際上是它們的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無法再找到它的文件,這是有道理的。但是有沒有辦法解決這個問題? –