多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
多媒体系统的媒体扫描功能,是通过一个APK应用程序提供的,它位于package/providers/MediaProvider目录下。通过分析APK的Android.mk文件可知,该APK运行时指定了一个进程名,如下所示: `application android:process=android.process.media` 原来,通过ps命令经常看到的进程就是它啊!另外,从这个APK程序所处的package\providers目录也可知道,它还是一个ContentProvider。事实上从Android应用程序的四大组件来看,它使用了其中的三个组件: - MediaScannerService(从Service派生)模块负责扫描媒体文件,然后将扫描得到的信息插入到媒体数据库中。 - MediaProvider(从ContentProvider派生)模块负责处理针对这些媒体文件的数据库操作请求,例如查询、删除、更新等。 - MediaScannerReceiver(从BroadcastReceiver派生)模块负责接收外界发来的扫描请求。也就是MS对外提供的接口。 除了支持通过广播发送扫描请求外,MediaScannerService也支持利用Binder机制跨进程调用扫描函数。这部分内容,将在本章的拓展部分中介绍。 本章仅关注android.process.media进程中的MediaScannerService和MediaScannerReceiver模块,为书写方便起见,将这两个模块简称为MSS和MSR,另外将MediaScanner简称MS,将MediaProvider简称MP。 下面,开始分析android.process.media中和媒体文件扫描相关的工作流程。