美文网首页
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

相关文章

  • 拷贝assets内容到安卓手机

    新建一个Android Studio项目。 在main文件夹下,新建assets文件夹,得到app/src/mai...

  • Android 文件管理 新建文件夹

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

  • react-native-amap3d自定义图片

    新建文件夹drawable-xxhdpi在android/app/src/main/res下新建一个文件夹,命名为...

  • shape

    drawable 文件夹下新建 xml 文件: android:shape 设置 shape 形状。 rectag...

  • 2020-10-21

    android 10 配置,运行非安全网络链接可用 1、在res下,新建xml文件夹,在此文件夹下新建networ...

  • 完善home组件的内容

    配置组件 在src目录下面新建一个components文件夹集中管理组件 新建tabbar文件夹,在下面新建Hom...

  • iOS-从0到组件使用

    新建组件 本地新建一个文件夹,用于存放管理组件(起名:TestPod) 下载组件模板到TestPod文件夹 组件基...

  • CentOS文件目录管理

    文件目录管理 新建空文件:touch file(不会覆盖文件); > file(会覆盖旧文件内容) 新建文件夹:m...

  • Android修改开机动画简单记录

    首先,在桌面新建一个test文件夹,并在该目录下新建2个文件夹folder1和folder2。 连接Android...

  • actionBar标题栏里的控件

    在res目录下创建menu文件夹,再在menu文件夹下新建一个menu.xml文件 其中android:showA...

网友评论

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

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