是否可以在Android的媒体元sqlite数据库上进行原始查询?

hez*_*hez 7 java sqlite mp3 android mediastore

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

应用程序应该仅列出和播放已经由用户通过偏好选择的特定类型集合标记的音乐,例如"Pop","Rock","Hillbilly".

现在我正试图找到一种有效的方法来查找包含用所选流派标记的曲目的所有专辑ID和专辑名称.

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

在使用Android SDK的Java中,这似乎更难,至少在API等级7及以上.我可以在MediaStore上使用managedQuery在同一个底层数据库上执行一些有限的SQL语法,但是如果我理解正确的话,那么在使用这个API时就没有JOIN和DISTINCT.

我也可能忽略了这一点,但MediaStore允许我搜索一种类型的所有曲目,但不能搜索单个查询中几种类型的所有曲目.

所以这一切都在java中获得了一些手动工作.该程序现在必须为每个类型执行几个managedQuery()调用,并且程序必须加入结果并使它们与sqlite(此工作所属的)之外的java不同.

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

谢谢!

hac*_*bod 2

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