在查询Genres.Members.EXTERNAL_CONTENT_URI的专辑

时间:2012-10-04 09:56:29

标签: java android mediastore

我有兴趣对特定类型的所有专辑执行查询。 Android可以使用MediaStore.Audio.Artists.Albums.getContentUri轻松对特定艺术家的相册执行类似的查询,但就查询类型而言,MediaStore.Audio.Genres.Members.getContentUri是提供的最佳方式,但这用于返回来自一个流派的歌曲。

您可以在执行Genres.Members查询后使用MediaStore.Audio.Genres.Members.ALBUM轻松返回每个类型成员的相册名称,以返回相册名称,但这仅在您展示时才有用歌曲。

我可以选择某种类型的选择来仅返回某种类型的专辑,或者我可以使用的特殊Uri吗?我没有找到任何关于此的文档,所以如果有人有任何信息,将非常感谢。

1 个答案:

答案 0 :(得分:7)

你在这里:

    {
        int genreId = 2; // << Set Your Genre ID Here
        Uri uri = MediaStore.Audio.Albums.getContentUri("external");
        Log.i("XXX", "uri = " + uri.toString());
        Cursor cursor = null;
        try {

            String selection = "album_info._id IN "
                    + "(SELECT (audio_meta.album_id) album_id FROM audio_meta, audio_genres_map "
                    + "WHERE audio_genres_map.audio_id=audio_meta._id AND audio_genres_map.genre_id=?)";
            String[] selectionArgs = new String[] { String.valueOf(genreId) };
            String[] proj = { AlbumColumns.ALBUM };
            cursor = getContentResolver().query(uri, proj, selection,
                    selectionArgs, null);
            if (null != cursor) {
                Log.i("XXX", "cursor rows count = " + cursor.getCount());
                while (cursor.moveToNext()) {
                    Log.i("XXX", "  Album: " + cursor.getString(0));
                }
                cursor.close();
                Log.i("XXX", "cursor closed");
            }
        } catch (Exception ex) {
            Log.e("XXX", "Error Querying Database");
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }

编辑
已修复查询以获取具有指定类型ID的所有相册