在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。他们之间的关系如下:

Android下媒体库的实现_第1张图片

有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的代码。

更多相关文章

  1. Android读取文件
  2. freetype 在android编译时上的一个makefile文件
  3. Android里的媒体库
  4. Android 数据存储(二) 文件的使用
  5. android保存文件到手机内存
  6. 安卓布局文件中控件的各种属性的含义
  7. 每周总结20130821——android控件的尺寸、http文件上传

随机推荐

  1. android 4.4 添加物理按键
  2. Android listView 中响应Button点击事件
  3. Android 收集程序崩溃日志,保存本地
  4. 笔记,atmel4android,内核
  5. android典型代码系列(五)------deviceadm
  6. Android:week 12总结 内容观察者、广播、
  7. Android中Spinner控件之键值对用法实例分
  8. android获得屏幕大小,使用sdk1.6
  9. 一些小技巧(持续更新……)
  10. Android读取asset目录的文件转File