关于Android成功写入文件后windows文件管理器看不到的问题

问题描述

private void testGenerateFile(){
    try {
        // 输出路径为/storage/emulated/0/Out/test.xml
        File file=  FileUtil.getFileFromCommon("Out","test.xml");
        XMLUtil.saveData(file);
        showToast("导出文件成功!");
         } catch (Exception e) {
        e.printStackTrace();
        showToast("SD卡不可用");
    }
}

该方法是生成一个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扫描广播里携带的文件路径。这也是一个异步过程。

你可能感兴趣的:(关于Android成功写入文件后windows文件管理器看不到的问题)