作者: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的代码。
转:Android下媒体库的实现
最新推荐文章于 2022-01-04 11:56:20 发布