【问题标题】:How to get album artist data without MediaStore.ALBUM_ARTIST如何在没有 MediaStore.ALBUM_ARTIST 的情况下获取专辑艺术家数据
【发布时间】:2025-11-21 22:50:02
【问题描述】:

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

该常量在其 JavaDoc 中有一个 @hide,这似乎从外部“隐藏”了该字段(在这里找不到支持我的合法来源,我可能错了)。 MediaStore source-code

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

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

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

【问题讨论】:

    标签: android mediastore


    【解决方案1】:

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

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

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

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

    你可以参考这个问题 questiondocumentation

    ps:你要访问的常量会在android R之后成为android sdk的一部分

    【讨论】:

      最近更新 更多