android 11 引入了强制执行分区存储的限制,导致应用默认不能访问外部文件。
针对以前涉及较多文件的操作,可采用申请所有文件访问权限的方式来解决这一问题,实现方式如下。
(虽然这样做安全性低,官方并不推荐这样,但确实最快适配原有应用程序的方式)
1. androidmanifest.xml中添加如下内容:
用于声明应用程序需要使用 manage_external_storage 权限。同时,使用了 tools:ignore=“scopedstorage” 来忽略与分区存储(scoped storage)相关的 lint 检查。
<!-- android11额外添加 -->
<uses-permission android:name="android.permission.manage_external_storage"
tools:ignore="scopedstorage" />
2. 申请所有文件访问权限,该操作会跳转到所有文件权限申请页面
// 请求文件访问权限的请求码,可以是任意整数值
private static final int request_manage_files_access = 2;
//申请所有文件访问权限
public void requestpermission() {
if (build.version.sdk_int >= build.version_codes.r) {
//判断是否有管理外部存储的权限
if (!environment.isexternalstoragemanager()) {
intent intent = new intent(settings.action_manage_app_all_files_access_permission);
intent.setdata(uri.parse("package:" + getpackagename()));
startactivityforresult(intent, request_manage_files_access);
} else {
// todo: 2023/11/22
// 已有所有文件访问权限,可直接执行文件相关操作
}
} else {
// todo: 2023/11/22
//非android11及以上版本,走正常申请权限流程
}
}
发表评论