【问题标题】:Android Mediastore: How to efficiently retrieve all songs of a certain genre?Android Mediastore:如何有效地检索某种流派的所有歌曲?
【发布时间】:2011-12-14 22:50:13
【问题描述】:

我知道如何检索特定歌曲的流派(请参阅getting the genres),但我想检索特定流派的所有歌曲。由于“流派”似乎不是媒体项目的列之一,因此我不知道如何在单个查询中执行此操作,这与艺术家或专辑不同。有没有有效的方法?谢谢!

【问题讨论】:

  • 除非音乐列表很庞大(超过 30k 首歌曲),否则我认为您不会因为获取所有歌曲,然后检查流派并添加正确的歌曲而遭受太多性能损失到一个列表。
  • 我有 2K 首歌曲,需要很长时间才能显示进度对话框,即使在我的速度适中的 Samsung Charge 上也是如此。在我的 600MHz 廉价平板电脑上它非常慢(由于某种原因,慢了两倍多)。如果需要,我会这样做,但我希望我错过了一个技巧。

标签: android mediastore


【解决方案1】:
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);

【讨论】:

  • 您能否添加一些文字来解释您在这里所做的事情?
  • Audio.Genres.Members.getContentUri("external",genreID) 生成 uri,如 (content://media/external/audio/genres/2/members) 其中“external”表示,我们将搜索外部内容,“2”是流派 ID。 ContentResolver.query(...) 查询给定的 uri 并在结果集上返回一个 Cursor。
  • @AlexanderMikhalevich 你能帮我吗stackoverflow.com/questions/25235127/…
  • 链接不可用@AkshayMukadam
【解决方案2】:

您可以通过将内容 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;
    }

}

【讨论】:

    猜你喜欢
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多