【问题标题】:Is it possible to do a raw query on Android's media meta sqlite database?是否可以对 Android 的媒体元 sqlite 数据库进行原始查询?
【发布时间】: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 数据库文件发送原始查询?

谢谢!

【问题讨论】:

标签: java android sqlite mp3 mediastore


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-03-05
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多