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函数中被调用的。


发布了270 篇原创文章 · 获赞 273 · 访问量 377万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览