昨天往项目中添加Android自定义异常捕获的工具类时(参考Android自定义捕获Application全局异常)碰到一件很诡异的事情,createNewFile一直报no such file or directory,往前追发现是mkdir失败了(mkdirs也一样fail),网上搜了很多都说是AndroidManifest.xml中没有配置读写sd卡的权限(实际上我已经配置了),最后才定位到是android10之后不能问题。
附上我最后解决问题的关键代码段:

  1. 在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"/>
  1. 在使用的地方发起请求,系统会有一个弹窗,提示是否允许读写权限
 ActivityCompat.requestPermissions(this, new String[]{     Manifest.permission.WRITE_EXTERNAL_STORAGE}, 222);  
  1. 选择弹窗的允许后,会触发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"

更多相关文章

  1. Android多文件断点续传(二)——实现数据库储存下载信息
  2. Android5.1系统通过包名给应用开放系统权限的方法
  3. Android手机的那点事
  4. [Android(安卓)Pro] Android(安卓)手机root 并 安装 BusyBox pro
  5. Android悬浮窗使用小结
  6. androidManifest.xml之uses-permission(权限-安全控制)
  7. Android(安卓)root原理
  8. Android(安卓)NDK探究奥秘一:Android(安卓)Studio创建第一个JNI项
  9. 彻底解决Android6.0权限管理问题

随机推荐

  1. SQL中的三种去重方法小结
  2. SQL SERVER 开启CDC 实操详细
  3. SQL Server表分区删除详情
  4. Spark SQL 2.4.8 操作 Dataframe的两种方
  5. SQL注入与防止及myBaits基本作用
  6. SQL查询语句求出用户的连续登陆天数
  7. Windows环境下实现批量执行Sql文件
  8. SQL Server 触发器详情
  9. SQL Server 2017无法连接到服务器的问题
  10. 使用SQL SERVER存储过程实现历史数据迁移