我使用方法來獲取我的Android設備保存音樂的默認目錄。Android外部存儲
該方法返回的目錄存在(類似於sdcard/music),但它沒有任何音樂文件。當我檢查我的SD卡時,我發現所有音樂文件都存儲在另一個由我的某個應用程序(sdcard/qqmusic/song)命名的目錄中,這些目錄無法使用getExternalStoragePublicDirectory
方法找到。
在這種情況下(不同設備將音樂存儲在不同的位置),有沒有什麼好方法可以獲得路徑,而不管設備間的差異?
我使用方法來獲取我的Android設備保存音樂的默認目錄。Android外部存儲
該方法返回的目錄存在(類似於sdcard/music),但它沒有任何音樂文件。當我檢查我的SD卡時,我發現所有音樂文件都存儲在另一個由我的某個應用程序(sdcard/qqmusic/song)命名的目錄中,這些目錄無法使用getExternalStoragePublicDirectory
方法找到。
在這種情況下(不同設備將音樂存儲在不同的位置),有沒有什麼好方法可以獲得路徑,而不管設備間的差異?
正如我們在評論中所討論的,我將展示Android音樂應用程序如何查找所有音樂文件。
Android音樂應用程序只需查詢MediaProvider即可獲取外部存儲上的所有音樂,即sdcard。
並且數據庫由MediaScannerService填充。 MediaScannerService調用MediaScanner.scanDirectories來搜索這些目錄下的所有文件。如果它是音頻文件,則獲取元數據並將其放入數據庫(MediaProvider)。
if (MediaProvider.INTERNAL_VOLUME.equals(volume)) {
// scan internal media storage
directories = new String[] {
Environment.getRootDirectory() + "/media",
};
}else if (MediaProvider.EXTERNAL_VOLUME.equals(volume)) {
// scan external storage volumes
directories = mExternalStoragePaths;
}
if (directories != null) {
scan(directories, volume);
}
所以我的答案是MediaProvider已經包含在外部存儲的音樂文件,這樣你就可以直接查詢供應商獲得的所有音樂文件。
首先檢查MediaStore。
您可以使用以下代碼獲取所有音樂文件。
//Some audio may be explicitly marked as not being music
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
String[] projection = {
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.DISPLAY_NAME,
MediaStore.Audio.Media.DURATION
};
cursor = this.managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
null,
null);
private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()){
songs.add(cursor.getString(0) + "||" + cursor.getString(1) + "||" + cursor.getString(2) + "||" + cursor.getString(3) + "||" + cursor.getString(4) + "||" + cursor.getString(5));
}
MediaStore.Audio.Media.DATA
列包含該音樂文件的完整路徑。
我可以理解遊標部分,但MediaProvider部分讓我困惑。你能否詳細解釋一下? – Allen 2013-03-19 13:41:07
EXTERNAL_VOLUME通常表示sdcard,scan(...)方法調用MediaScanner中的scanDirectory方法,我已經發布了MediaScanner的源代碼,您可以查看它。 @Allen – StarPinkER 2013-03-20 00:19:30
讓用戶告訴你這些音樂文件在哪裏是明智的。 – StarPinkER 2013-03-17 04:22:40
我想大多數用戶不會在意他們的設備在哪裏保存音樂文件。 – Allen 2013-03-17 08:15:37
但很明顯,音樂是由qqmusic這是一個在中國流行的應用程序下載。該目錄由該應用程序創建。 – StarPinkER 2013-03-17 08:38:55