我正在写一个小应用程序来播放音乐。我的目标是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数据库文件?
谢谢!
答案 0 :(得分:2)
不,你不能直接访问数据库的底层结构 - 实际上你无法知道数据库的实际结构,它已经跨平台版本发生了变化。您可以做的唯一直接查询是通过内容提供商的MediaStore协议提供的查询。