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


©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值