Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Mediastore:如何高效地检索特定流派的所有歌曲?_Android_Mediastore - Fatal编程技术网

Android Mediastore:如何高效地检索特定流派的所有歌曲?

Android Mediastore:如何高效地检索特定流派的所有歌曲?,android,mediastore,Android,Mediastore,我知道如何检索特定歌曲的流派(请参阅),但我想检索特定流派的所有歌曲。由于“流派”似乎不是媒体项目的一个列,我不知道如何在一个查询中完成它,不像艺术家或专辑。有没有有效的方法?塔克斯 您可以通过组合一个内容URI并查询MediaStore来实现这一点。以下是从Android音乐播放器中借用的一些代码: String [] cols = new String [] {MediaStore.Audio.Genres.NAME}; Cursor cursor = MusicUtils.query(th

我知道如何检索特定歌曲的流派(请参阅),但我想检索特定流派的所有歌曲。由于“流派”似乎不是媒体项目的一个列,我不知道如何在一个查询中完成它,不像艺术家或专辑。有没有有效的方法?塔克斯

您可以通过组合一个内容URI并查询MediaStore来实现这一点。以下是从Android音乐播放器中借用的一些代码:

String [] cols = new String [] {MediaStore.Audio.Genres.NAME};
Cursor cursor = MusicUtils.query(this,
                ContentUris.withAppendedId(MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, Long.valueOf(mGenre)),
                cols, null, null, null);
这是MusicUtils中的代码:

public static Cursor query(Context context, Uri uri, String[] projection,
        String selection, String[] selectionArgs, String sortOrder, int limit) {
    try {
        ContentResolver resolver = context.getContentResolver();
        if (resolver == null) {
            return null;
        }
        if (limit > 0) {
            uri = uri.buildUpon().appendQueryParameter("limit", "" + limit).build();
        }
        return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
     } catch (UnsupportedOperationException ex) {
        ErrorReporter.getInstance().putCustomData("UnsupportedOperationException", "true");
        return null;
    }

}

除非音乐列表非常庞大(30k歌曲+),否则我不认为你会因为获得所有歌曲,然后检查它们的类型并将正确的一首添加到列表中而遭受太多的性能损失。我有2K首歌曲,而且需要足够长的时间来建立进度对话,即使我的三星充电速度还算快。在我的600MHz cheapo平板电脑上速度非常慢(出于某种原因,速度是原来的两倍多)。如果需要的话,我会这么做,但我希望有一个技巧我没有。你能添加一些文本来解释你在这里做了什么吗?Audio.Genres.Members.getContentUri(“external”,genreID)生成uri,比如(content://media/external/audio/genres/2/members)其中“外部”是指我们将通过外部内容进行搜索,以及“2”是类型ID.ContentResolver.query(…)查询给定的uri并返回结果集上的光标。@AlexanderMikhalevich你能帮我一下吗?链接不可用@AkshayMukadam
Uri uri = Audio.Genres.Members.getContentUri("external", genreID); 

String[] projection = new String[]{Audio.Media.TITLE, Audio.Media._ID};

Cursor cur = contentResolver.query(uri, projection, null, null, null);