Android中声音文件与数据库表的对应关系

大家知道,在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

.......

<本篇完>

你可能感兴趣的:(Android开发技术与实践,数据库,android,audio,sqlite,notifications,delete)