コメントで説明したように、Android Music アプリケーションがすべての音楽ファイルを見つける方法を紹介します。
Android Music アプリケーションは、MediaProvider にクエリを実行するだけで、外部ストレージ (SD カードなど) にあるすべての音楽を取得できます。
そして、データベースは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
列には、その音楽ファイルへのフル パスが含まれています。