小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

android MediaScanner

 浮云沫沫33 2013-09-06

(一)MediaScanner總體架構

本文是筆者的分析歸納,并用UML圖(Class Diagram/Sequence Diagram)來呈現。雖然來源于對Android源碼的分析,但文中不會占用大量篇幅羅列源碼,所以讀者在閱讀本文時,手頭最好有Android源碼,結合源碼來解讀。本文講述MediaScanner的架構。

    MediaScanner是Android系統(tǒng)Media的基礎,系統(tǒng)啟動之初,就掃描出Media文件供后續(xù)使用,有新媒體加入或者刪除掉媒體文件,也需要更新相應的媒體庫。Android的Music、Gallery等播放或呈現媒體文件的程序也都基于穩(wěn)定的MediaScanner掃描媒體文件的結果,否則,會發(fā)現程序操作的Media文件的URI根本不是實際對應的Media文件,或者甚至來電鈴聲和鬧鈴等都會有問題。

        MediaScanner位于packages/providers/MediaProvider下,包含MediaScannerReceiver、MediaScannerService以及MediaProvider

下圖是packages/providers/MediaProvider下的AndroidManifest的內容:

MediaScanner Architecture

  •  MediaScannerReceiver是一個BroadcastReceiver,接收廣播,進行媒體掃描,這也是MediaScanner提供給外界的接口之一。收到廣播之后啟動MediaScannerService具體執(zhí)行掃描工作。
  •  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的不同請求所做的處理。

本文是筆者的分析歸納,并用UML圖(ClassDiagram/Sequence Diagram)來呈現。雖然來源于對Android源碼的分析,但文中不會占用大量篇幅羅列源碼,所以讀者在閱讀本文時,手頭最好有Android源碼,結合源碼來解讀。本文講述MediaScanner的入口MediaScannerReciever針對不同Broadcast的請求所做的處理。

 

上文中的圖中可以講到,MediaScannerReceiver處理三種Broardcast請求:

  •  BOOT_COMPLETED 系統(tǒng)啟動之后,掃描內部Media文件;
  •  MEDIA_MOUNTED 外部存儲卡掛載之后,掃描外部Media;
  •  MEDIA_SCANNER_SCAN_FILE 掃描外部存儲器上的一個媒體文件。

下圖MediaScanner針對每一種請求的處理:

MediaScannerReceiver

  •  如果收到的是BOOT_COMPLETED,設置參數“volume”為“internal”,通過startService()啟動MediaScannerService開始內部Media文件掃描;
  •  如果收到的是MEDIA_MOUNTED 并且path是“/mnt/sdcard”,設置參數“volume”為“external”,通過startService()啟動MediaScannerService開始外部整個Media文件掃描;
  •  如果收到的是MEDIA_MOUNTED 并且path是“/mnt/sdcard”,設置參數“volume”為“external”,“folder”為所要掃描的路徑,通過startService()啟動MediaScannerService開始對外部某個路徑進行Media文件掃描;
  •  如果收到的是MEDIA_SCANNER_SCAN_FILE ,設置參數“filepath”為獲取到的文件,通過startService()啟動MediaScannerService開始對外部某個文件進行掃描。

 

小結】本文講述MediaScanner的入口MediaScannerReciever針對不同Broadcast的請求(BOOT_COMPLETED/MEDIA_MOUNTED/ MEDIA_SCANNER_SCAN_FILE)所做的處理。

掃描如何實現的,接下來看MediaScannerService中的實現。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多