无法在模拟器上的 /storage/emulated/0 上创建目录

Posted

技术标签:

【中文标题】无法在模拟器上的 /storage/emulated/0 上创建目录【英文标题】:Can't create a directory on /storage/emulated/0 on emulator 【发布时间】:2016-07-05 05:48:19 【问题描述】:

我正在尝试在我的 android 模拟器上创建一个目录,但我做不到,我已经拥有清单 write_storage 的权限,并且我没有收到任何错误但 mkdir() 返回 false,我验证外部存储是否是也是可写的,它可以在我的代码的物理设备上运行:

 /// Cria uma nova pasta para colocar o backup
    File direct = new File(Environment.getExternalStorageDirectory(),
            "/Financas RW Backup");
    try 


        if (!direct.exists()) 
            if(isExternalStorageWritable()&&isExternalStorageReadable()) 
              if(  direct.mkdir()) 
                  fachada.showMessage(ExportImportDB.this," Criado");
              else
                  fachada.showMessage(ExportImportDB.this," Não Criado");
              
            
        
     catch (Exception e) 
        fachada.showMessage(this, e.toString());
    

【问题讨论】:

使用 mkdirs();如果不存在,它将创建父文件夹;但 mkdir 不会创建,因此它会返回 false 我也试了,不行 好吧,这样做; Environment.getExternalStorageDirectory().getAbsolutePath(), +"你的自定义"; 把你的异常日志放在这里。 您在 Android 6 上运行吗? 【参考方案1】:

你必须选择:

compileSdkVersiontargetSdkVersion 降级为build.gradle 中的较低版本 在 Android 6需要在运行时请求写入权限 .

我个人不建议第一个。欲了解更多信息检查:

Android 6.0 Marshmallow. Cannot write to SD Card Google Play services 8.1 and Android 6.0 Permissions

希望这会有所帮助!

【讨论】:

问题是android的版本,我用低版本试了下也可以! 请求权限有效;我们应该在控制台中收到关于此的警告。 Android Studio 3.1 仍然没有警告。【参考方案2】:

我在使用 Android 10 时遇到了同样的问题。我通过在清单中的 <application> 元素中添加 android:requestLegacyExternalStorage="true" 解决了这个问题

注意:我们也可以使用context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)。 Environment 中还有其他目录类型常量,例如 DIRECTORY_MUSICDIRECTORY_MOVIES 等。

【讨论】:

【参考方案3】:

使用 mkdirs 代替 mkdir 解决了类似的问题

【讨论】:

以上是关于无法在模拟器上的 /storage/emulated/0 上创建目录的主要内容,如果未能解决你的问题,请参考以下文章

Android多媒体之音频播放

有时无法访问配对手表模拟器上的 WatchConnectivity 会话

无法在 El Capitan 上的 Xcode 6.4 上下载 iOS 7.1 模拟器

IOS 7模拟器上的“无法识别的选择器”崩溃

无法在模拟器上的 /storage/emulated/0 上创建目录

无法使用 android 模拟器上的 Firestore 模拟器访问云 Firestore 后端