关于Android 10 访问文件出现 open failed: EACCES (Permission denied)

Android 10 中即使在 Manifest 里面申请了

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

存储读取权限,并且App动态获得了权限,在通过绝对路径打开文件时,也有可能出现 open failed: EACCES (Permission denied) 权限不足的错误。
这里官方文档的解释是:以 Android 10(API 级别 29)及更高版本为目标平台的应用在默认情况下被赋予了对外部存储设备的分区访问权限(即分区存储)。此类应用只能看到本应用专有的目录(通过 Context.getExternalFilesDir() 访问)以及特定类型的媒体。
这种分区存储限制了应用通过绝对路径去打开文件,不能通过File file = new File(filePath)去打开,这类路径不具有直接内核访问权限。要访问此类文件,应用必须使用 MediaStore,并调用 openFile() 等方法。
如果不得不从绝对路径中打开文件,可以通过在 Manifest 的 application 标签里面加上

android:requestLegacyExternalStorage="true"

来使用旧版本的存储规则。
Android文档

你可能感兴趣的:(Android)