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

问题描述 投票:1回答:1

在我正在做的应用程序中,我试图从一个歌曲文件中获取专辑艺术家。我用光标进行了查询,并提取了其中的 album_artist 栏目(https:/stackoverflow.coma59631970),但这个常量与这个字符串(MediaStore.Audio.AudioColumns.ALBUM_ARTIST)使我的应用程序无法编译,导致 Unresolved reference 异常。

该常量有一个 @hide 在其JavaDoc中,似乎将该字段从外部 "隐藏 "起来(找不到合法的来源来支持我,我可能错得很离谱)。MediaStore源码

让我苦恼的是,SDK中存在常量,列也存在(手动传递String也可以),常量也在代码中,为什么我不能用?如果有更好的方法是什么?代码中没有说明,而且 MediaStore.Audio.Albums.ARTIST 不给我我想要的数据(给我 "艺术家 "而不是 "专辑艺术家")。

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

(现在我留下硬编码的字符串)

android mediastore
1个回答
1
投票

一种解决方案是 回答这可能并不可靠,为了保证读取 album_artist 标签,你必须通过手动读取标签。mediaMetadataRetriever.

在android pie (api 28)之前,你可以尝试使用和引用这些方法,通过反射,但从那时起,谷歌已经将所有非sdk接口的使用列入黑名单。唯一的例外是在特定的api级别使用非sdk接口,但你的应用必须不支持任何bellow api级别。

这样改变的原因是,非sdk接口是android生态系统的一部分,由于一些内部原因必须在AOSP上使用,但不是最终的或对公众开放的。谷歌不保证任何非sdk接口不会改变行为或被删除,破坏你的应用。由于开发者坚持在生产应用中使用这类接口,他们决定严格执行这一限制。

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

你可以参考这个问题疑问文件

ps: 你想访问的常量将成为android sdk的一部分后 安卓R

© www.soinside.com 2019 - 2024. All rights reserved.