安卓的媒体元数据sqlite数据库能否进行原始查询?

7

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

该应用程序只应列出并播放已被用户通过偏好选择的特定流派标记的音乐,例如“流行音乐”,“摇滚乐”,“山区音乐”等。

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

这在SQL中很容易实现。手机将媒体元数据存储在SQLite数据库中。我已经在手机内部存储器上找到了它,并通过adb将其复制并对其进行了一些SQLite查询。结果查询是一个SQL单行代码,并且可以正常工作。

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

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

因此,这在Java中需要进行一些手动操作。程序现在必须为每个流派执行多个managedQuery()调用,并且程序必须在Java中将结果连接并使它们不同于SQLite(这项工作应该属于SQLite)。

这真的是唯一的解决方法吗?没有办法直接向SQLite数据库文件发送原始查询吗?

谢谢!


我以前已经在Android中使用过db.rawQuery()来处理自己的SQLite数据库,这种方法能否应用到元数据库?http://www.codeproject.com/Articles/119293/Using-SQLite-Database-with-Android - mszaro
1个回答

2

不可以直接访问数据库的底层结构,实际上你也无法知道数据库的真实结构,因为它在不同平台版本中是不同的。你只能通过内容提供程序的MediaStore协议提供的直接查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接