uni-app 安卓10+ 文件管理权限已授权无法访问
uni-app 安卓10+ 文件管理权限已授权无法访问
操作步骤:
无
预期结果:
无
实际结果:
无
bug描述:
已获取所有文件的管理权限并且已经打开,但动态获取权限时显示“永久拒绝的权限”
其次minSdkVersion设置的28 还报错“targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径!具体请看:https://ask.dcloud.net.cn/article/36199”
相关链接:
| 信息 | 值 |
|---|---|
| 产品分类 | HTML5+ |
| HBuilderX版本号 | 3.2.12 |
| 手机系统 | Android |
| 手机系统版本号 | Android 11 |
| 手机厂商 | vivo |
| 手机机型 | iQOO Z1 |
| 打包方式 | 离线 |

更多关于uni-app 安卓10+ 文件管理权限已授权无法访问的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是逻辑层限制了 只要android11都不可以访问非公共区域路径
更多关于uni-app 安卓10+ 文件管理权限已授权无法访问的实战教程也可以访问 https://www.itying.com/category-93-b0.html
回复 1***@qq.com: 是的 逻辑层限制了
回复 1***@qq.com: 这个问题我们会记录 暂时不会解除 后续会优化该逻辑。 目前看没有解决方案
回复 DCloud_Android_ST: 请问是否已经有解决方案了
回复 1***@qq.com: 你这么实现的逻辑 我看怎么处理下
回复 DCloud_Android_ST: 请问是否y有其他处理方式?
回复 1***@qq.com: 如果你的需求是操作所有文件,那就只能是我们后续会添加对所有文件权限的判定。有权限的条件下放开限制正常执行IO操作。 其他处理方式!就是把文件都放在沙盒目录下。 但不确定你的需求是否符合
回复 DCloud_Android_ST: 我本地打包生成安卓源文件给到原生安卓开发他们,请问uniapp是否还能限制访问所有文件读取的权限?
回复 1***@qq.com: 我们只限制了uni的API 如果你纯原生开发不会限制
回复 1***@qq.com: 你反馈的问题 我们已经在处理了 只是需要等待一段时间。 修改的方式就是IO操作时会检验所有文件操作权限。如果开通则会继续执行
回复 1***@qq.com: 不能确定。可能一到两周在alpha版本体现
回复 DCloud_Android_ST: 请问今天更新的 3.4.1.20220308-alpha 解决了这个问题吗
回复 1***@qq.com: 没
回复 DCloud_Android_ST:请问 3.4.2.20220310-alpha 解决了这个问题吗
回复 1***@qq.com: 不会那么快。下个alpha会带上。。。
回复 DCloud_Android_ST: 请问3.4.3.20220325-alpha是否已解决问题?
回复 1***@qq.com: 是 你可以使用默认基座验证下
回复 DCloud_Android_ST: 不是我说你们这技术水平实在太差了,今年买了个iqoo10,什么鬼原子隐私系统,qq浏览器移动进隐私系统,申请视频小窗权限,应用列表里面居然找不到qq浏览器,你们就没发现自己设计这玩意儿是个bug吗,还有这个文件管理功能,随便重命名一下qq浏览器文件夹,文件管理器看不到了,qq浏览器也看不到了,只有用adb shell 能看到,这是什么鬼啊,你们是一群大专在写代码吗
这是Android 10(API 29)及以上版本引入的存储权限策略(Scoped Storage)导致的兼容性问题。你需要同时处理两个关键点:
- targetSdkVersion必须设置为29或更高(建议29),并在manifest.json中配置Android权限:
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
],
"targetSdkVersion": 29
}
- 文件路径必须使用应用私有目录,不能直接使用
/storage/emulated/0/等绝对路径。正确写法:
// 获取应用私有目录
const fs = uni.getFileSystemManager()
const filePath = `${uni.env.USER_DATA_PATH}/yourfile.txt`
// 或使用plus.io转换路径
plus.io.requestFileSystem(plus.io.PRIVATE_DOC, function(fs) {
const rootPath = fs.root.fullPath
})
-
如果确实需要访问公共目录,必须使用系统文件选择器(
uni.chooseFile)或申请MANAGE_EXTERNAL_STORAGE特殊权限(上架Google Play可能被拒)。 -
权限请求代码示例:
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
// 授权成功
},
fail(err) {
// 引导用户手动开启
uni.showModal({
content: '需要文件权限',
success(res) {
if (res.confirm) {
uni.openAppAuthorizeSetting()
}
}
})
}
})


