小编Mat*_*att的帖子

为什么MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI没有提供准确的"专辑艺术家"?

我正在使用android MediaStore.我可以在设备上获得音乐列表,以及与每个媒体项目相关的所有详细信息(标题,艺术家,持续时间等)

我希望能够通过他们的专辑艺术家展示专辑列表.

需要明确的是,每个轨道有一个艺术家,像"NOFX",但如果编辑CD上发生的轨迹,像朋克奥拉玛,艺术家是"NOFX",但专辑的艺术家可能会是这样的"群星. "

我在这里回顾了这个问题:

Android - 从Cursor获取专辑艺术家

我正在尝试使用MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI和MediaStore.Audio.Albums.ARTIST来实现.但是,这似乎没有返回正确的结果.

看看Android源代码,我可以看到事实上在MediaStore.Audio.Media.EXTERNAL_CONTENT_URI后面有一个album_artist字段,但它被标记为"@hide".(见行〜1170 https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/provider/MediaStore.java).

我发现这个领域通过其他[相关] Android源代码看: https://android.googlesource.com/platform/development/+/master/apps/Development/src/com/android/development/MediaScannerActivity.java

我写了一个简单的app/activity来测试这个:

package com.ma.albumartisttest;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.util.SparseArray;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // query all media and get the album_artist field
        Cursor cursor = getContentResolver().query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                new String[]{MediaStore.Audio.Media.ALBUM_ID, "album_artist"}, null, null, null);

        // Store an id=>name map
        SparseArray<String> albumArtistNames = new SparseArray<String>();
        if (cursor != null) …
Run Code Online (Sandbox Code Playgroud)

android mediastore android-contentprovider

9
推荐指数
1
解决办法
3005
查看次数