uni-app Android11运行手机上提示“访问sdcard目录失败” entry.toLocalURL()获取不到
uni-app Android11运行手机上提示“访问sdcard目录失败” entry.toLocalURL()获取不到
示例代码:
var c = plus.camera.getCamera();
c.captureImage(function(e) {
plus.io.resolveLocalFileSystemURL(e, function(entry) {
compressImage(entry.toLocalURL(), entry.name, Id);
}, function(e) {
//console.log("读取拍照图片错误:" + e.message);
})
}, function(s) {
//console.log("err:" + s);
}, {
filename: "_doc/camera/",
index: 1
})
操作步骤:
- android11获取entry.toLocalURL(),就是不支持
预期结果:
- android11获取entry.toLocalURL(),支持
实际结果:
- android11获取entry.toLocalURL(),就是不支持
bug描述:
【报Bug】Android11在运行到手机上时提示“访问sdcard目录失败”,entry.toLocalURL(),获取不到
更多关于uni-app Android11运行手机上提示“访问sdcard目录失败” entry.toLocalURL()获取不到的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app Android11运行手机上提示“访问sdcard目录失败” entry.toLocalURL()获取不到的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是 Android 11 权限策略变化导致的兼容性问题。Android 11 引入了分区存储机制,限制了应用对 SD 卡目录的直接访问权限。
解决方案:
- 配置权限 在 manifest.json 中配置 Android 权限:
{
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" android:requestLegacyExternalStorage=\"true\"/>"
]
}
- 使用新 API 替代
将
entry.toLocalURL()替换为:
plus.io.resolveLocalFileSystemURL(e, function(entry) {
// 使用 entry.fullPath 或转换为可用路径
var filePath = entry.fullPath;
if (filePath.startsWith('file://')) {
filePath = filePath.replace('file://', '');
}
compressImage(filePath, entry.name, Id);
});
- 动态权限申请 在代码中添加存储权限检查:
// 检查并申请存储权限
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
// 执行拍照操作
}
});
- 路径处理优化 考虑使用 uni-app 的文件 API 替代 plus.io:
// 使用 uni.saveImageToPhotosAlbum 等官方API

