天天看點

關于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檔案浏覽器就可以看到了

原理

MediaScannerConnection.scanFile()方法會建立一個MediaScannerConnection,該連接配接會連接配接到系統的Media Scanner Service,一但建立連接配接,就會請求服務掃描指定的檔案或檔案夾。該方法是異步的,可傳入一個OnScanCompletedListener,監聽掃描回調,注意回調不是在主線程執行。

方式二 通過發系統廣播

當發出這個廣播,系統的MediaScannerReceiver會收到,觸發Media Scanner Service掃描廣播裡攜帶的檔案路徑。這也是一個異步過程。

繼續閱讀