Android(安卓)10.0后创建文件createNewFile()和创建文件夹mkdirs()均失败解决方案
16lz
2022-05-12
昨天往项目中添加Android自定义异常捕获的工具类时(参考Android自定义捕获Application全局异常)碰到一件很诡异的事情,createNewFile一直报no such file or directory,往前追发现是mkdir失败了(mkdirs也一样fail),网上搜了很多都说是AndroidManifest.xml中没有配置读写sd卡的权限(实际上我已经配置了),最后才定位到是android10之后不能问题。
附上我最后解决问题的关键代码段:
- 在AndroidManifest.xml中添加对应的权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 在使用的地方发起请求,系统会有一个弹窗,提示是否允许读写权限
ActivityCompat.requestPermissions(this, new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE}, 222);
- 选择弹窗的允许后,会触发onRequestPermissionsResult这个函数,重写这个函数,添加自己的特定需求
@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (!hasAllPermissionsGranted(grantResults)) { return; } switch (requestCode) { case 222: Toast.makeText(getApplicationContext(), "已申请权限", Toast.LENGTH_SHORT).show(); default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } }
之后 在需要的地方创建文件夹,即可。
但是Android10之后Google默认不允许随意创建文件夹。解决方法有三个
1.使用Android规定的文件夹做操作
2.将gradle中的编译环境,SDK的版本号修改到29以下
3.清单文件加入下面这句话即可随意创建文件夹
android:requestLegacyExternalStorage="true"
更多相关文章
- Android多文件断点续传(二)——实现数据库储存下载信息
- Android5.1系统通过包名给应用开放系统权限的方法
- Android手机的那点事
- [Android(安卓)Pro] Android(安卓)手机root 并 安装 BusyBox pro
- Android悬浮窗使用小结
- androidManifest.xml之uses-permission(权限-安全控制)
- Android(安卓)root原理
- Android(安卓)NDK探究奥秘一:Android(安卓)Studio创建第一个JNI项
- 彻底解决Android6.0权限管理问题