Android MediaScanner:(一)MediaScanner总体架构
田海立@csdn
2012-05-19
本文是笔者的分析归纳,并用UML图(Class Diagram/Sequence Diagram)来呈现。虽然来源于对Android源码的分析,但文中不会占用大量篇幅罗列源码,所以读者在阅读本文时,手头最好有Android源码,结合源码来解读。本文讲述MediaScanner的架构。
MediaScanner是Android系统Media的基础,系统启动之初,就扫描出Media文件供后续使用,有新媒体加入或者删除掉媒体文件,也需要更新相应的媒体库。Android的Music、Gallery等播放或呈现媒体文件的程序也都基于稳定的MediaScanner扫描媒体文件的结果,否则,会发现程序操作的Media文件的URI根本不是实际对应的Media文件,或者甚至来电铃声和闹铃等都会有问题。
MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider。
下图是packages/providers/MediaProvider下的AndroidManifest的内容:
- MediaScannerReceiver是一个BroadcastReceiver,接收广播,进行媒体扫描,这也是MediaScanner提供给外界的接口之一。收到广播之后启动MediaScannerService具体执行扫描工作。
- MediaScannerService是一个Service,负责媒体扫描,它还要用到Framework中的MediaScanner来共同完成具体扫描工作,扫描的结果在MediaProvider提供的数据库中。
- MediaProvider是一个ContentProvider,媒体库(Images/Audio/Video/Playlist等)的数据提供者。负责操作数据库,并提供给别的程序insert、query、delete、update等操作。
另外,IMediaScannerService和IMediaScannerListenter这两个Interface提供给其他程序通过AIDLIPC调用扫描单个文件的能力。定义在framework中,Service中实现接口。
下面针对MediaScanner中的各个部分,分别讲解:
Android MediaScanner:(一)MediaScanner总体架构
讲述MediaScanner的架构。
Android MediaScanner:(二)MediaScannerReceiver
讲述MediaScannerReceiver针对来自Broadcast的不同请求所做的处理。
Android MediaScanner:(三)MediaScannerService
对MediaScannerService的类结构进行静态分析,对创建时和启动时的工作进行动态分析,分析过程中来看MediaScannerService如何处理MediaScannerReceiver所接收到的各种扫描请求。
Android MediaScanner:(四)MediaScanner之scanSingleFile
本文从MediaScannerService的scanFile入口开始,详细分析MediaScanner和MediaScannerClient对单个媒体文件的扫描处理过程。
Android MediaScanner:(五)MediaScanner之scanDirectories
Android MediaScanner:(六)MediaScanner之Native实现
Android MediaScanner:(七)MediaScanner完整过程总结
Android MediaScanner:(八)IMediaScannerService接口实现