我正在使用android MediaStore.我可以在设备上获得音乐列表,以及与每个媒体项目相关的所有详细信息(标题,艺术家,持续时间等)
我希望能够通过他们的专辑艺术家展示专辑列表.
需要明确的是,每个轨道有一个艺术家,像"NOFX",但如果编辑CD上发生的轨迹,像朋克奥拉玛,艺术家是"NOFX",但专辑的艺术家可能会是这样的"群星. "
我在这里回顾了这个问题:
我正在尝试使用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)