有没有办法使用 MediaStore 获取歌曲的流派?

Is there any way to fetch song's genre using MediaStore?

使用这种方法从Android的外部存储器中检索音频文件

Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, null);

我真的可以找到一种合理的方法来获取给定歌曲的流派吗? MediaStore class 似乎提供了除流派字段之外的所有其他内容——从歌曲的标题到作曲者信息。那我应该使用 MediaMetadataRetriever 吗?如果是这样,为设备上的每首歌曲创建 MediaMetadataRetriever 实例会在多大程度上降低应用程序的性能?

也许有一些更好的方法可以从 android 中的外部和内部存储中检索所有音频文件?

Developer's Site

所述

您可以使用 MediaStore.Audio.Genres

获取音频文件的流派

示例代码:

private static String[] genresProj = {
            MediaStore.Audio.Genres.NAME,
            MediaStore.Audio.Genres._ID
    };

 int idIndex = cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media._ID);

 while (cursor.moveToNext()){
                int id = Integer.parseInt(mediaCursor.getString(idIndex));

                Uri uri = MediaStore.Audio.Genres.getContentUriForAudioId("external", id );
                genresCursor = context.getContentResolver().query(uri,
                        genresProj , null, null, null);
                int genreIndex = genresCursor.getColumnIndexOrThrow(MediaStore.Audio.Genres.NAME);                


                    while (genresCursor.moveToNext()) {
                        Log.d(TAG, "Genre = " +genresCursor.getString(genreIndex));
                    }

            }
        }

要获取音频文件的其他详细信息,请检查here