本文最后更新于 814 天前,其中的信息可能已经有所发展或是发生改变。
今天在写Android的时候突然发现APP不能向自身的Android/data或内部文件夹写入文件。
按理来说,在申请了读写储存空间权限的情况下我们也只能读写本应用的文件夹,但我在复制文件的时候出现了一些小问题。
我试着复制文件到Android/data,但是抛出了如下异常信息,居然是无法读取要复制的文件。
android.system.ErrnoException: open failed: EACCES (Permission denied)
于是上搜索引擎找了一圈,发现Android 11有点不一样,除了EXTERNAL_STORAGE需要申请以外,还需要有MANAGE_EXTERNAL_STORAGE权限。
MANAGE_EXTERNAL_STORAGE 就是运行应用访问所有文件,如果没有这个权限,Android 11及以上版本就无法访问其他储存空间内的文件。
要动态申请到它也很简单,只需要判断一下Android版本和权限情况即可。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if(!Environment.isExternalStorageManager()){
startActivity(new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION));
}
}
这样我们就打开了授权应用访问所有文件的界面,接下来用户自行操作即可。