我正在尝试查找MediaStore使用的sqlite数据库。据我了解,MediaStore包含默认音乐应用程序中定义的播放列表等内容。实际上,我想复制一个播放列表,但该应用程序不允许这样做。我认为如果能找到实际的db文件,就可以解决此问题。但是我现在完全被分心了,因为我无法找到这个数据库。顺便说一下,我正在运行FroYo。
我正在尝试查找MediaStore使用的sqlite数据库。据我了解,MediaStore包含默认音乐应用程序中定义的播放列表等内容。实际上,我想复制一个播放列表,但该应用程序不允许这样做。我认为如果能找到实际的db文件,就可以解决此问题。但是我现在完全被分心了,因为我无法找到这个数据库。顺便说一下,我正在运行FroYo。
查看Android源代码,我们感兴趣的类似乎是android.provider.MediaStore
,在这里,getDatabaseForUri()
方法似乎会为每个外部存储卡和一个名为internal.db
的存储库生成不同的数据库。
因此,我认为你感兴趣的文件是:
/data/data/com.android.providers.media/databases/internal.db
不过,我的数据库复制品中没有Java源代码中使用的audio_playlists
表,所以我不确定这是否正确。
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);
/data/data/com.android.providers.media/databases/internal.db
音频播放列表不在Tables中,你可以在Views中查看。 SQL工具是:Sqliteman,Ubuntu 13.10
/data
是由root
拥有的,因此您无法在未经 root 的手机上使用 ASTRO 浏览它。尝试将您的手机连接到开发 PC 并使用adb shell
。我认为这在所有手机上都以 root 权限运行,但我没有未经 root 的手机来检查这一点。 - David Webbadb shell
然后运行su
命令,您应该可以获得 root 访问权限。在未 root 的手机上,似乎只有root
和shell
用户可以使用su
,但我猜adb shell
作为shell
用户运行,所以它应该可以工作。 - David Webb