Android 文件管理 新建文件夾

需求

越來越多的設(shè)備使用MTP的方式連接PC,傳輸數(shù)據(jù)。項目中需要在連接PC的狀態(tài)下,做新建文件的操作,需要及時更新PC端的顯示。

方案及代碼

【環(huán)境】4.4以上;win7
【失敗方案】最開始以為是沒有及時更新媒體庫的原因,使用發(fā)送廣播重新掃描:

  mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + Environment.getExternalStorageDirectory().getPath())));
  mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file:///mnt/external_sd")));

PS:有可能是因為空文件夾默認不刷新。(未驗證)

【成功方案】相信很多人都找到了MediaScannerConnection.scanFile()方法。這個方法確實可行,但用法有些特殊。
MediaScannerConnection.scanFile()不刷新新的空文件夾!(坑了我半天)。從官方的方法注釋也看不出支持還是不支持文件夾的掃描,所以我一度認為它只支持文件掃描。不扯了,上代碼

 private void updateMTP(String path, String name) {
    String filePath = path + File.separator + name + File.separator + ".tempFile.txt";
    File tempFile = new File(filePath);
    boolean createTempFileState = false;
    try {
        createTempFileState = tempFile.createNewFile();
    } catch (IOException e) {
        e.printStackTrace();
    }
    //如果創(chuàng)建失敗,直接放棄掃描
    if (createTempFileState) {
        //在設(shè)備連接電腦時,4.4以上不能用Intent.ACTION_MEDIA_MOUNTED掃描SD卡的廣播
        //可使用MediaScannerConnection.scanFile()方法,但是這個方法在創(chuàng)建空文件夾時要特殊處理
        // 1.創(chuàng)建文件夾
        // 2.在文件夾下創(chuàng)建一個臨時文件
        // 3.掃描并等到掃描結(jié)束刪除臨時文件
        MediaScannerConnection.scanFile(
                mContext,
                new String[]{filePath},
                null,
                new MediaScannerConnection.MediaScannerConnectionClient() {
                    @Override
                    public void onMediaScannerConnected() {}

                    @Override
                    public void onScanCompleted(String path, Uri uri) {
                        File fileForDelete = new File(path);
                        if (fileForDelete.exists() && fileForDelete.delete()) {
                            //文件存在且刪除成功的情況下,刪除對應(yīng)的媒體庫數(shù)據(jù)
                            mContext.getContentResolver().delete(uri, null, null);
                        }
                    }
                }
        );
    }
}

參考

解決 android 在sd卡新建文件后需要重啟才能找到的評論
Android通過廣播更新文件和文件夾到媒體庫
Android4.4中拒絕發(fā)送Intent.ACTION_MEDIA_MOUNTED掃描SD卡的廣播 - Geder

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,117評論 25 708
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,529評論 9 467
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • Android初級: 1.了解Android系統(tǒng)架構(gòu) 應(yīng)用層: Java應(yīng)用開發(fā)工程師開發(fā)的所有應(yīng)用程序比如地圖,...
    醉馬當前闖閱讀 4,703評論 2 32
  • 流年似水, 婉然而逝。 任喧囂, 淹沒在漫漫時光里。 倚窗, 握一卷古詞。 啟唇, 便口齒生香。 清淺時光里, 有...
    染青綾閱讀 262評論 8 9