如何在没有 MediaStore.ALBUM_ARTIST 的情况下获取专辑艺术家数据

How to get album artist data without MediaStore.ALBUM_ARTIST

在我正在开发的应用程序中,我试图从歌曲文件中获取专辑艺术家。我使用游标进行了查询并提取了 album_artist 列 (),但是带有此字符串 (MediaStore.Audio.AudioColumns.ALBUM_ARTIST) 的常量阻止我的应用程序编译导致 Unresolved reference 异常.

常量在其 JavaDoc 中有一个 @hide,它似乎 "hide" 来自外部的字段(在这里找不到合法的来源来支持我,我可能是非常错误的)。 MediaStore source-code

困扰我的是SDK中存在常量,列存在(手动传递字符串有效)并且常量在代码中,为什么我不能使用它?如果有更好的方法是什么?代码中没有任何指示,MediaStore.Audio.Albums.ARTIST 没有给我我想要的数据(给我 "artist" 而不是 "album artist")。

有人知道获取这些数据的正确方法是什么吗?

(现在我要离开硬编码字符串)

一个解决方案是 answer 做你想做的可能不靠谱,为了保证album_artist标签的读取,你必须通过mediaMetadataRetriever.

手动读取标签

您正在尝试访问非 sdk 接口,这些都是 android 文档中未引用的所有方法、常量、类 等。 在android pie(api 28)之前,你可以尝试通过反射来使用和引用这些方法,但是从那时起google已经将所有非sdk接口的使用列入黑名单。唯一的例外是在特定 api 级别使用非 SDK 接口时,但您的应用不得支持以下任何 api 级别。

进行此类更改的原因是非 sdk 接口是 android 生态系统的一部分,由于某些内部原因必须在 AOSP 上可用,但不是最终的或可用于 public。 Google 不保证任何非 sdk 接口不会改变行为或被删除,从而破坏您的应用程序。由于开发人员坚持在生产 apps 中使用此类接口,他们决定严格执行限制。

javadoc中的@hide注解将代码从编译后的javaDoc中排除。因此,当 google 构建其文档时,不在 android 文档中的常量是预期的行为。

你可以参考这个问题 and the documentation

ps:你要访问的常量会在android R

后成为androidsdk的一部分