美文网首页
Android 文件管理 新建文件夹

Android 文件管理 新建文件夹

作者: HUA丶 | 来源:发表于2017-04-08 16:53 被阅读0次

    需求

    越来越多的设备使用MTP的方式连接PC,传输数据。项目中需要在连接PC的状态下,做新建文件的操作,需要及时更新PC端的显示。

    方案及代码

    【环境】4.4以上;win7
    【失败方案】最开始以为是没有及时更新媒体库的原因,使用发送广播重新扫描:

      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();
        }
        //如果创建失败,直接放弃扫描
        if (createTempFileState) {
            //在设备连接电脑时,4.4以上不能用Intent.ACTION_MEDIA_MOUNTED扫描SD卡的广播
            //可使用MediaScannerConnection.scanFile()方法,但是这个方法在创建空文件夹时要特殊处理
            // 1.创建文件夹
            // 2.在文件夹下创建一个临时文件
            // 3.扫描并等到扫描结束删除临时文件
            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()) {
                                //文件存在且删除成功的情况下,删除对应的媒体库数据
                                mContext.getContentResolver().delete(uri, null, null);
                            }
                        }
                    }
            );
        }
    }
    

    参考

    解决 android 在sd卡新建文件后需要重启才能找到的评论
    Android通过广播更新文件和文件夹到媒体库
    Android4.4中拒绝发送Intent.ACTION_MEDIA_MOUNTED扫描SD卡的广播 - Geder

    相关文章

      网友评论

          本文标题:Android 文件管理 新建文件夹

          本文链接:https://www.haomeiwen.com/subject/opglattx.html