【发布时间】:2012-02-29 21:30:14
【问题描述】:
我正在编写一个小应用程序来播放音乐。我的目标是 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 数据库文件发送原始查询?
谢谢!
【问题讨论】:
-
我之前在 Android 中为我自己的 SQLite 数据库使用过 db.rawQuery(),是否可以将其应用于元数据库? codeproject.com/Articles/119293/…
标签: java android sqlite mp3 mediastore