Android下载文件时对MediaScanner的调用

下载时会启动MediaScannerService进行扫描下载的文件。

启动MediaScannerService的代码位于以下文件:

 packages\providers\downloadprovider\src\com\android\providers\downloads\DownloadService.java

        private void bindMediaScanner() {
            if (!mMediaScannerConnecting) {
                Intent intent = new Intent();
                intent.setClassName("com.android.providers.media",
                        "com.android.providers.media.MediaScannerService");
                mMediaScannerConnecting = true;
                bindService(intent, mMediaScannerConnection, BIND_AUTO_CREATE); // 启动MediaScannerService对下载的文件进行扫描
            }
        }

1.启动媒体扫描服务MediaScannerService

对bindMediaScanner函数的调用在本文件的UpdateThread类的run函数中。

UpdateThread类的对象在updateFromProvider函数中被创建。

而调用updateFromProvider函数的地方有4处,包括:

(1)DownloadManagerContentObserver类的onChange函数中

(2)MediaScannerConnection类的onServiceConnected,onCreate和onStartCommand函数中

2.执行文件扫描

在scanFile函数中执行了IMediaScannerService的requestScanFile函数,对文件进行扫描。

扫描完成后,更新数据库,根据scanFile的参数设置为“已经扫描”;或者从MediaProvider数据库和Downloads数据库中删除此记录,并删除此文件。

scanFile函数是在deleteDownload函数中UpdateThread类的run函数中被调用的。


你可能感兴趣的:(Android下载文件时对MediaScanner的调用)