转: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。他们之间的关系如下:
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. android保存文件到手机内存
  3. 安卓布局文件中控件的各种属性的含义
  4. 每周总结20130821——android控件的尺寸、http文件上传
  5. Android调用系统自带的文件管理器进行文件选择并获得路径,android
  6. Android 文件的保存与读取之SDCard(SD卡)存储
  7. Android Studio共用Eclipse的Android项目文件

随机推荐

  1. Different ways to access HTTP resource
  2. Android中和service进行本地通讯
  3. Android中数据的保存和提取
  4. android-数据库操作实例,留着以后用
  5. Android 如何获取最顶端的Top Activity
  6. Android源码中的单例模式android.util.Si
  7. Android Studio实现Activity生命周期的7
  8. android 硬解码用opengles3.0渲染视频
  9. 调试android ethernet 的常用命令
  10. android ndk知识汇总