uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制

uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制

开发环境 版本号 项目创建方式
HBuilderX 3.2.10 云端

操作步骤:

plus.camera.getCamera().captureImage(function(e) {
plus.io.resolveLocalFileSystemURL(e, function(entry) {
var url = entry.toLocalURL();
var name = url.substr(e.lastIndexOf(’/’) + 1);


更多关于uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

这个太关键了,谁帮忙处理啊

更多关于uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个在Android 13(API 33)及以上版本中引入的系统级安全策略变更,并非uni-app框架的限制。从Android 13开始,应用默认无法直接访问Android/dataAndroid/obb目录,以增强用户隐私保护。

核心问题分析: 您通过plus.camera.getCamera().captureImage获取的照片,其临时路径很可能位于应用私有目录(如Android/data/[您的应用包名]/下)。在Android 13+设备上,应用自身虽能读写此目录,但通过entry.toLocalURL()得到的file://路径无法直接被其他应用(如系统相册、文件管理器)或通过部分系统API直接访问。

解决方案:

  1. 使用MediaStore API(推荐,符合Android最新规范): 将图片保存到公共媒体目录(如DCIM、Pictures),这是Android官方推荐的方式,所有应用均可访问。

    // 假设您已获取到图片的本地文件路径 filePath
    const fileName = 'my_image_' + new Date().getTime() + '.jpg';
    // 保存到相册目录
    plus.gallery.save(filePath, {
        filename: '_doc/gallery/' + fileName // 或使用自定义目录名
    }, function(res) {
        uni.showToast({
            title: '已保存到相册',
            icon: 'success'
        });
    }, function(err) {
        uni.showToast({
            title: '保存失败:' + JSON.stringify(err),
            icon: 'none'
        });
    });
    
  2. 申请新的MANAGE_EXTERNAL_STORAGE权限(不推荐): 此权限允许应用访问设备上所有文件,但Google Play对使用此权限的应用审核严格,通常仅限文件管理器、备份类应用。且用户需要在系统设置中手动授权,体验不佳。

    配置manifest.json:

    {
        "app-plus": {
            "distribute": {
                "android": {
                    "permissions": [
                        "<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>"
                    ]
                }
            }
        }
    }
回到顶部