Android里的媒体库

来源:互联网 发布:淘宝抢购脚本 编辑:程序博客网 时间:2024/05/02 00:51

转:Android下媒体库的实现

作者:jl
Android下面,媒体库是以ContentProvider来实现的,所谓媒体库,这里并不是资源管理器,而是一个多媒体的文件的管理,多媒体文件包含很多的信息,如作者、年份、专辑、封面等等,在Android下面,这个Provider的实现是在

frameworks/base/core/java/android/provider/MediaStore.java
packages/providers/MediaProvider/src/com/android/providers/media.
frameworks/base/media/java/android/media/MediaScanner*
frameworks/base/media/jni/android_media_*

这个下面的,具体媒体文件的识别是在

external/opencore/android/mediascanner.cpp

并且为了便于手动控制什么时候去扫描媒体文件,以及得到扫描的消息,这里还要有两个东东,一个是

MediaScannerReceiver,另外一个是 MediaScannerService。他们之间的关系如下:

当 有ACTION_BOOT_COMPLETED, ACTION_MEDIA_MOUNTED 或者ACTION_MEDIA_SCANNER_SCAN_FILE intent 请求的的时候,我们的Service就会启动。但是它会花费很长的时间去扫描文件,因而这是一个异步的过程,存在一个receiver,扫描的地方有两个:外部存储设备和/root/media这两个地方。

/* Audio */

addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg");

addFileType("M4A", FILE_TYPE_M4A, "audio/mp4");

addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav");

addFileType("AMR", FILE_TYPE_AMR, "audio/amr");

addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");

addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma");

addFileType("OGG", FILE_TYPE_OGG, "application/ogg");

addFileType("MID", FILE_TYPE_MID, "audio/midi");

addFileType("XMF", FILE_TYPE_MID, "audio/midi");

addFileType("RTTTL", FILE_TYPE_MID, "audio/midi");

addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi");

addFileType("IMY", FILE_TYPE_IMY, "audio/imelody");

/* Video */

addFileType("MP4", FILE_TYPE_MP4, "video/mp4");

addFileType("M4V", FILE_TYPE_M4V, "video/mp4");

addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp");

addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp");

addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2");

addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2");

addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv");

/* Image */

addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg");

addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg");

addFileType("GIF", FILE_TYPE_GIF, "image/gif");

addFileType("PNG", FILE_TYPE_PNG, "image/png");

addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp");

addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp");

/* Audio Play List */

addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl");

addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls");

addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl");

具体的如何解析可以参见mediascanner.cpp的代码
原创粉丝点击