无法在模拟器上的 /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】:你必须选择:
将compileSdkVersion
和targetSdkVersion
降级为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_MUSIC
、DIRECTORY_MOVIES
等。
【讨论】:
【参考方案3】:使用 mkdirs 代替 mkdir 解决了类似的问题
【讨论】:
以上是关于无法在模拟器上的 /storage/emulated/0 上创建目录的主要内容,如果未能解决你的问题,请参考以下文章
有时无法访问配对手表模拟器上的 WatchConnectivity 会话
无法在 El Capitan 上的 Xcode 6.4 上下载 iOS 7.1 模拟器