(一)MediaScanner總體架構(gòu) 本文是筆者的分析歸納,并用UML圖(Class Diagram/Sequence Diagram)來呈現(xiàn)。雖然來源于對(duì)Android源碼的分析,但文中不會(huì)占用大量篇幅羅列源碼,所以讀者在閱讀本文時(shí),手頭最好有Android源碼,結(jié)合源碼來解讀。本文講述MediaScanner的架構(gòu)。
MediaScanner是Android系統(tǒng)Media的基礎(chǔ),系統(tǒng)啟動(dòng)之初,就掃描出Media文件供后續(xù)使用,有新媒體加入或者刪除掉媒體文件,也需要更新相應(yīng)的媒體庫。Android的Music、Gallery等播放或呈現(xiàn)媒體文件的程序也都基于穩(wěn)定的MediaScanner掃描媒體文件的結(jié)果,否則,會(huì)發(fā)現(xiàn)程序操作的Media文件的URI根本不是實(shí)際對(duì)應(yīng)的Media文件,或者甚至來電鈴聲和鬧鈴等都會(huì)有問題。 MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider 下圖是packages/providers/MediaProvider下的AndroidManifest的內(nèi)容:
另外,IMediaScannerService和IMediaScannerListenter這兩個(gè)Interface提供給其他程序通過AIDLIPC調(diào)用掃描單個(gè)文件的能力。定義在framework中,Service中實(shí)現(xiàn)接口。
下面針對(duì)MediaScanner中的各個(gè)部分,分別講解: Android MediaScanner:(一)MediaScanner總體架構(gòu) 講述MediaScanner的架構(gòu)。 Android MediaScanner:(二)MediaScannerReceiver 講述MediaScannerReceiver針對(duì)來自Broadcast的不同請(qǐng)求所做的處理。
本文是筆者的分析歸納,并用UML圖(ClassDiagram/Sequence Diagram)來呈現(xiàn)。雖然來源于對(duì)Android源碼的分析,但文中不會(huì)占用大量篇幅羅列源碼,所以讀者在閱讀本文時(shí),手頭最好有Android源碼,結(jié)合源碼來解讀。本文講述MediaScanner的入口MediaScannerReciever針對(duì)不同Broadcast的請(qǐng)求所做的處理。
在上文中的圖中可以講到,MediaScannerReceiver處理三種Broardcast請(qǐng)求:
下圖MediaScanner針對(duì)每一種請(qǐng)求的處理:
【小結(jié)】本文講述MediaScanner的入口MediaScannerReciever針對(duì)不同Broadcast的請(qǐng)求(BOOT_COMPLETED/MEDIA_MOUNTED/ MEDIA_SCANNER_SCAN_FILE)所做的處理。 掃描如何實(shí)現(xiàn)的,接下來看MediaScannerService中的實(shí)現(xiàn)。 |
|