Android11 处理文件 出现 open failed: EACCES (Permission denied) 问题 您所在的位置:网站首页 属于酸性吗 Android11 处理文件 出现 open failed: EACCES (Permission denied) 问题

Android11 处理文件 出现 open failed: EACCES (Permission denied) 问题

2024-01-27 23:01| 来源: 网络整理| 查看: 265

问题原因:

Android Q 引入了分区存储的概念 官方解释:以 Android 10(API 级别 29)及更高版本为目标平台的应用 默认情况下被赋予了对外部存储空间的分区访问权限(即分区存储)

分析:

分区存储改变了应用在设备的外部存储设备中存储和访问文件的方式。 虽然Android 为对外部存储空间的读写访问定义了以下权限: READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE。 但是对启用了分区存储方式的平台,访问外部存储也受到了限制。

解决:

以 Android 10(API 级别 29)为目标平台,请停用分区存储,继续使用适用于 Android 9 及更低版本的方法来执行此操作。 在清单文件 application节点内添加 requestLegacyExternalStorage属性

android:requestLegacyExternalStorage="true"

以 Android 11 (API 级别 30)为目标平台后,会强制执行分区存储,系统会忽略 requestLegacyExternalStorage 标记。并且WRITE_EXTERNAL_STORAGE 权限和 WRITE_MEDIA_STORAGE 特许权限将不再提供任何其他访问权限。 但是Android 提供了一种名为“所有文件访问权限”的特殊应用访问权限。在我们的清单文件内添加权限**** ``

作用:

MANAGE_EXTERNAL_STORAGE权限授予以下访问: 1、对共享存储中的所有文件进行读写访问。 2、访问MediaStore.Files表的内容 。 3、访问USB便携式(OTG)驱动器和SD卡的根目录。 4、访问所有内部存储directories⁠,除了 /Android/data/,/sdcard/Android和大多数子目录 /sdcard/Android。

不过我们最好还是要迁移数据进行分区存储,以便更好地管理自己的文件、减少混乱。这样的话,即使在启用分区存储后,您的应用也可以继续访问这些文件。 需要注意的是从 Android 11 开始, 1、应用无法在外部存储设备上创建自己的应用专用目录。如需访问系统为您的应用提供的目录,请调用 getExternalFilesDirs()。 2、应用不能访问其他任何应用的数据目录中的文件。 3、应用无法再访问外部存储设备中的任何其他应用的专用于特定应用的目录中的文件。

详情请看: Android 11 中的存储机制更新 Android 存储用例和最佳做法



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有