版权声明:本文为 newtrekWang 原创文章,可以随意转载,但必须在明确位置注明出处!!!

问题描述

该方法是生成一个xml文件,文件路径在/storage/emulated/0/Out/test.xml,执行后提示“导出文件成功!”,但是该test.xml文件在手机文件浏览器上显示正常,能立即发现,但是在windows系统上却始终找不到该文件。

原因

The media scanner service will read metadata from the file and add the file to the media content provider.

系统特性。Android系统专门有一个Media Scanner Service,负责读取文件的元数据(metadata,比如包含文件类型,文件路径等),将文件的元数据添加到Media Content Provider里。而上述方法新建一个文件后,并没有请求Media Scanner Service扫描新建的文件,也就没有将test.xml的元数据添加到Media Content Provider里,而window文件浏览器可能需要读取Media Content Provider里的数据,所以看不到新建的test.xml

解决

请求Media Scanner Service 扫描指定的文件。

方式一 通过调用MediaScannerConnection.scanFile()

image.png
执行后,windows文件浏览器就可以看到了

原理

image.png
MediaScannerConnection.scanFile()方法会创建一个MediaScannerConnection,该连接会连接到系统的Media Scanner Service,一但建立连接,就会请求服务扫描指定的文件或文件夹。该方法是异步的,可传入一个OnScanCompletedListener,监听扫描回调,注意回调不是在主线程执行。
image.png

方式二 通过发系统广播

image.png
当发出这个广播,系统的MediaScannerReceiver会收到,触发Media Scanner Service扫描广播里携带的文件路径。这也是一个异步过程。

Hits: 16

分类: Android

发表评论

电子邮件地址不会被公开。 必填项已用*标注