Android 11外部存储根目录下mkdirs()返回false问题咨询
问题现象
mkdirs()方法在Android 11系统上运行异常,在Android 10及更低版本的系统上所有功能表现正常。
对应的测试代码如下:
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/My_directory/"; File temp_file = new File(path); if (!temp_file.exists()) { Boolean can_create = temp_file.mkdir(); }
代码执行的实际表现:在Android 10及更低版本上执行时,目录创建操作返回成功;在Android 11上执行时,目录创建操作返回失败。
已完成的适配排查
- Manifest配置中已添加完整的存储相关权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - 已经完成上述两个权限的动态运行时申请流程,应用已获得对应的存储权限授权
- 在Manifest的application节点中已经配置
android:requestLegacyExternalStorage="true"属性 - 当前测试发现,仅能通过
getExternalFilesDir()路径正常向外部存储写入数据,但该路径不属于外部存储根目录;查阅官方存储适配规则、参考社区技术解答后获知,系统当前已经限制应用在外部存储根目录创建文件夹的能力。
待解答问题
- Android 11系统下,是否完全禁止应用在外部存储根目录创建任意文件夹?是否存在合规的变通实现方案?
- 若确实无法在外部存储根目录创建文件夹,除
getExternalFilesDir()路径外,Android 11环境下有哪些合规的外部存储数据保存方案? - 已经配置的
android:requestLegacyExternalStorage="true"属性为什么没有生效?
内容的提问来源于stack exchange,提问作者صلي علي محمد - Atef Farouk
相关产品推荐
相关产品推荐

