我有一个收听音乐广播的安卓应用程序。它使用以下 ApplicationManifest.xml (snippet) 接收跟踪更改通知:
<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 阅读器)缓存的随机文件,所以这显然不相关。