音楽放送を聴くAndroidアプリがあります。次の ApplicationManifest.xml (スニペット) を使用してトラック変更通知を受け取ります。
<receiver android:name=".music.AndroidMusicBroadcastReceiver">
<intent-filter>
<action android:name="com.android.music.metachanged"/>
<action android:name="com.android.music.playbackcomplete"/>
<action android:name="com.android.music.playstatechanged"/>
<action android:name="com.htc.music.metachanged"/>
<action android:name="com.htc.music.playbackcomplete"/>
<action android:name="com.htc.music.playstatechanged"/>
</intent-filter>
</receiver>
デフォルト(組み込み)のGoogle Play ミュージックアプリを実行している nexus 4 からこのブロードキャスト インテントを取得すると、バンドルには「アーティスト」や「タイトル」など、現在再生中のトラックに関する有用な情報が含まれています。私が望むファイルパスがありません。しかし、「id」フィールド (a long
) があるので、その ID をキーとして追加情報を検索できるのではないかと思います。しかし、私は理解できません: この ID がキーになっているデータベース/コンテンツ プロバイダーは何ですか?
私がこれまでに試したこと:
1) これは、次のいずれかのコンテンツ リゾルバーの _ID フィールドに対応すると予想していました。
- MediaStore.Audio.Media.INTERNAL_CONTENT_URI
- MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
しかし、私はそれらの両方を照会しようとしましたが、ID は同じ球場のどこにもありません。私の現在の例は、(ブロードキャストで)の「ID」を取得していることです3399
。しかし、EXTERNAL_CONTENT_URI 内のすべてのトラックを照会すると、20865 ~ 23051 の範囲の ID と、いくつかの小さな ID (20 と 24、Google+ アプリによってインストールされた通知と着信音に対応) が得られます。
このソースの場合、現在再生中のトラックの ID は次のようになります21373
(パスに基づいて ID を調べましたが、これは手動で調べることでわかります)。
INTERNAL_CONTENT_URI は、組み込みのもの (着信音など) を提供するだけです。すべての ID が 100 未満であるため、これも役に立ちません。
2) を使用して、すべてのメディア オブジェクトに対して同じクエリを実行しMediaStore.Files.getContentUri("external")
ました。たくさんの結果が返ってきましたが、ID3399
は newsrob (RSS リーダー) によってキャッシュされたランダムなファイルであるため、明らかに関連性がありません。