安卓MediaStore的sqlite数据库位置

7

我正在尝试查找MediaStore使用的sqlite数据库。据我了解,MediaStore包含默认音乐应用程序中定义的播放列表等内容。实际上,我想复制一个播放列表,但该应用程序不允许这样做。我认为如果能找到实际的db文件,就可以解决此问题。但是我现在完全被分心了,因为我无法找到这个数据库。顺便说一下,我正在运行FroYo。

4个回答

14

查看Android源代码,我们感兴趣的类似乎是android.provider.MediaStore,在这里,getDatabaseForUri()方法似乎会为每个外部存储卡和一个名为internal.db的存储库生成不同的数据库。

因此,我认为你感兴趣的文件是:

/data/data/com.android.providers.media/databases/internal.db

不过,我的数据库复制品中没有Java源代码中使用的audio_playlists表,所以我不确定这是否正确。


如何访问/data下的数据?我正在使用ASTRO浏览我的手机上的数据,但是/data文件夹为空。我不确定是否因为目录实际上是空的还是因为权限设置的缘故。 - Hardy
/data 是由 root 拥有的,因此您无法在未经 root 的手机上使用 ASTRO 浏览它。尝试将您的手机连接到开发 PC 并使用 adb shell。我认为这在所有手机上都以 root 权限运行,但我没有未经 root 的手机来检查这一点。 - David Webb
谢谢提供的信息。这对我帮助很大,也解释了为什么我找这个文件时遇到了这么大的困难。不幸的是,在未经root的手机上,“adb shell”似乎无法以root身份运行:( 这有多难呢!? - Hardy
@Hardy - 刚刚快速谷歌了一下 - 如果您使用 adb shell 然后运行 su 命令,您应该可以获得 root 访问权限。在未 root 的手机上,似乎只有 rootshell 用户可以使用 su,但我猜 adb shell 作为 shell 用户运行,所以它应该可以工作。 - David Webb
哦,看起来我没有权限。似乎与https://dev59.com/43I95IYBdhLWcg3w8y2N有关。 - Hardy

4
正确的方法是使用内容提供者查询媒体存储库并在那里对表进行任何类型的修改。
以下是如何查询MediaStore中所有艺术家的快速示例。
String[] proj = { MediaStore.Audio.Media._ID,
                        MediaStore.Audio.Media.DATA,
                        MediaStore.Audio.Media.DISPLAY_NAME,
                        MediaStore.Audio.Artists.ARTIST };
            //managed query doesn't need startManagingCursor called on the cursor
            Cursor c = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                        proj, null, null, null);

好的,那就用编程的方式来解决吧。我想在这种情况下,我可以先获取音乐播放器代码,然后添加一个重复播放列表功能。不过我的意思是,我想通过使用任何sqlite GUI直接编辑sqlite数据库来进行快速的黑客操作。我只是想知道哪个文件包含了这个数据库? - Hardy
啊,我明白了,你没有提到想要使用SQLite GUI来完成这个任务。只要你的手机已经root,那么提取数据库就不应该有问题。我会查找它的位置并回复你。 - smith324
你找到数据库的位置了吗?我真的找不到它 :( - Hardy
数据库中是否包含用于播放列表名称等全文搜索的FTS表? - seb

3
位置是:
/data/data/com.android.providers.media/databases/internal.db

音频播放列表不在Tables中,你可以在Views中查看。 SQL工具是:Sqliteman,Ubuntu 13.10


0
对于安卓11(已Root的原始版本)
我在这个位置找到了数据库
/data/data/com.android.providers.media.module/databases/internal.db(用于系统相关文件)
/data/data/com.android.providers.media.module/databases/external.db(用于用户相关文件)。
**请注意在com.android.providers.media之后添加单词"module"。

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