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 卡目录的直接访问权限。

解决方案:

  1. 配置权限 在 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\"/>"
  ]
}
  1. 使用新 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);
});
  1. 动态权限申请 在代码中添加存储权限检查:
// 检查并申请存储权限
uni.authorize({
    scope: 'scope.writePhotosAlbum',
    success() {
        // 执行拍照操作
    }
});
  1. 路径处理优化 考虑使用 uni-app 的文件 API 替代 plus.io
// 使用 uni.saveImageToPhotosAlbum 等官方API
回到顶部