在我正在做的应用程序中,我试图从一个歌曲文件中获取专辑艺术家。我用光标进行了查询,并提取了其中的 album_artist
栏目(https:/stackoverflow.coma59631970),但这个常量与这个字符串(MediaStore.Audio.AudioColumns.ALBUM_ARTIST
)使我的应用程序无法编译,导致 Unresolved reference
异常。
该常量有一个 @hide
在其JavaDoc中,似乎将该字段从外部 "隐藏 "起来(找不到合法的来源来支持我,我可能错得很离谱)。MediaStore源码
让我苦恼的是,SDK中存在常量,列也存在(手动传递String也可以),常量也在代码中,为什么我不能用?如果有更好的方法是什么?代码中没有说明,而且 MediaStore.Audio.Albums.ARTIST
不给我我想要的数据(给我 "艺术家 "而不是 "专辑艺术家")。
有谁知道获取这些数据的正确方法是什么?
(现在我留下硬编码的字符串)
一种解决方案是 回答这可能并不可靠,为了保证读取 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