7

我正在编写一个小应用程序来播放音乐。我的目标是 Android API 7 级及以上。

应用程序应仅列出和播放已标记有用户通过偏好选择的特定类型集的音乐,例如“流行”、“摇滚”、“乡巴佬”。

现在,我正在尝试找到一种有效的方法来查找所有专辑 ID 和专辑名称,其中包含带有所选流派标记的曲目。

这在 SQL 中很容易。手机将媒体元数据存储在 sqlite 数据库中。我在手机的内存中找到了它,通过 adb 复制了它并尝试了一些 sqlite 查询。生成的查询是一个带有连接链的 SQL 单线,它工作正常。

这在带有 Android SDK 的 Java 中似乎更加困难,至少在 API 级别 7 及更高版本中。我可以在 MediaStore 上使用 managedQuery 在同一个基础数据库上执行一些有限的 SQL 语法,但如果我理解正确,则在使用此 API 时没有 JOIN 和 DISTINCT。

我也可能忽略了这一点,但 MediaStore 允许我搜索一种流派的所有曲目,但不能在单个查询中搜索多种流派的所有曲目。

所以这一切都需要在java中进行一些手动工作。该程序现在必须为每种类型执行几次 managedQuery() 调用,并且程序必须在 sqlite 之外(该工作所属的地方)加入结果并使它们与 java 不同。

这真的是必须要做的吗?有没有办法只向 sqlite 数据库文件发送原始查询?

谢谢!

4

1 回答 1

2

不,你不能直接访问数据库的底层结构——事实上你无法知道数据库的实际结构,它已经跨平台版本发生了变化。您唯一可以执行的直接查询是通过内容提供者的 MediaStore 协议提供的查询。

于 2012-08-01T01:39:27.357 回答