大家知道,在setings应用中,用户可以设置来电铃声,通知铃声,闹铃等,那么,这些声音放在哪,对应的数据库又是什么?
在声音设置时,会将内置的声音和SD Card(如果存在的话)都显示出来,对应的声音目录为:
1. 内置的: /system/media/audio下的alarms,ringtones,notifications分别存放了闹铃,铃声,通知铃声, 对应的数据库表为:
/data/data/com.android.providers.media/databases/audio。 事实上,audio是一个视图,真正的表是audio_meta,正如下面的例子一样,用.schema audio可以显示出创建audio的SQL语句。
2. SD Card: /sdcard,对应的数据库表为:external-xxxxxxx.db
在系统启动时,Mediascanner会将内置的和SD card上的文件进行扫描,并创建出上面提到的数据库。这样一来,应用程序就可以通过Android提供的ContentResolver来进行数据的访问了。
下面是一个例子(查询内置声音):
# /root/tools/adb/adb shell
# cd /data/data/com.android.providers.media/databases
# ls
internal.db-shm
internal.db
internal.db-wal
external-1ebb0278.db
# sqlite3 internal.db
SQLite version 3.7.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tab
album_art artists_albums_map search
album_info audio searchhelpertitle
albums audio_meta thumbnails
android_metadata audio_sort video
artist_info audio_sort_view videothumbnails
artist_info_sort_view images
artists images_album_search
sqlite> .schema audio
CREATE VIEW audio as SELECT * FROM audio_meta LEFT OUTER JOIN artists ON audio_meta.artist_id=artists.artist_id LEFT OUTER JOIN albums ON audio_meta.album_id=albums.album_id;
CREATE TRIGGER audio_delete INSTEAD OF DELETE ON audio BEGIN DELETE from audio_meta where _id=old._id;DELETE from audio_playlists_map where audio_id=old._id;DELETE from audio_genres_map where audio_id=old._id;END;
sqlite> select * from audio;
1|/system/media/audio/alarms/闹钟02.ogg|闹钟02.ogg|19803|application/ogg|1313638400|1313426096|闹钟02QßQßDQ*Q*Q|1875|1||1|0||0|0|1|0|0||1||
|1QQQQQQQ-183121033|alarms
.......
<本篇完>