3

現在、音楽プレーヤーを作成しており、カーソルを使用してデバイス上の音楽を取得しています

mCursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, 
            requestedColumns, null, null, null);

どこ

private String[] requestedColumns = 
{
    MediaStore.Audio.Media.TITLE,
    MediaStore.Audio.Media._ID,
    MediaStore.Audio.Media.DATA,
    MediaStore.Audio.Media.ALBUM,
    MediaStore.Audio.Media.ALBUM_ID,
    MediaStore.Audio.Media.ARTIST,
    MediaStore.Audio.Media.ARTIST_ID,
    MediaStore.Audio.Media.YEAR,
    MediaStore.Audio.Media.DURATION,        
};

これは完全に機能しており、デバイス/SD カードから音楽を正常に取得しています。私の質問は:特定の曲のアルバム アーティストを取得する方法はありますか? 単に特定の曲のアーティストを意味するのではなく、曲が属するアルバム全体の背後にあるメイン アーティストを意味します。のようなものはないようですMediaStore.Audio.Media.ALBUM_ARTIST

MediaStore.Audio.Media.ALBUM補足:との使用の違い (もしあれば) は何MediaStore.Audio.ALBUMSですか?

4

3 に答える 3

2

あなたが探しているのはMediaStore.Audio.Albums.ARTIST、2 段階のプロセスの 2 番目の部分として調べることができる だと思います。

Cursor cursor = getActivity().managedQuery(
    MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, 
    new String[] {MediaStore.Audio.Albums._ID, MediaStore.Audio.Albums.ARTIST}, 
    MediaStore.Audio.Albums._ID+ "=?", 
    new String[] {albumId}, 
    null);

albumId曲のアルバム ID、つまり以前のクエリで取得したものはどこにありますか:MediaStore.Audio.Media.ALBUM_ID

MediaStore.Audio.ALBUMSすべてのアルバムに関するメタデータと考えてください。MediaStore.Audio.Media.ALBUMこのオーディオ ファイルのアルバムを参照します。Media常に個々のファイルに関するメタデータです。

于 2013-06-30T15:43:13.430 に答える
0

私のアプリでも同じ問題に気づいたので、人工メタデータを使用してテストを実行しました。

  • 2曲収録のアルバム「Testalbum」
  • 最初のトラック: アーティスト「Artist-A」、アルバムアーティスト「Test-Album-Artist」。
  • 2 番目のトラック: アーティスト「Artist-B」、アルバム-アーティスト「Test-Album-Artist」。

Android 4.4.4 (Cyanogen)、Android 6.0.1 (Google)、Android 7.1.2 (AOSP、非公式) でテストしました。Android 8.0 または 8.1 にアクセスできませんでした。

結果: Android はアルバム アーティストとして "Artist-A" を表示します。これは明らかに間違っています。

Android には 2 つのバグがあります。

  • Android はアルバム アーティスト タグを無視します。
  • Android はすべてのアーティストを比較するわけではありません:アーティストが異なる場合、Android は を選択するはずですvariousが、代わりに選択しanyます。

さらに、上記のバグ #52309 はかなり前にクローズされており、コメントは「時代遅れ」です。リファレンス音楽プレーヤーである Google Play Music でさえ、同じバグに悩まされています。これはナンセンスです。

では、どのような解決策がありますか?

  1. 古いバグレポートを再度開いてみてください。
  2. 新しいバグレポートを書きます。
  3. LineageOS などのソースの動作を修正します。
  4. 虫と一緒に「生きる」。
  5. すべてのトラックを読み取り、variousそれらがすべて一致しない場合に使用します。
  6. タガー ライブラリなどを使用して、Android から独立してメタデータを取得します。
于 2018-04-03T23:01:16.247 に答える