uni-app hbuildx 4.29 在小米手机上真机运行或者打包后无法保存图片到相册

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app hbuildx 4.29 在小米手机上真机运行或者打包后无法保存图片到相册

开发环境 版本号 项目创建方式
Windows 10 HBuilderX

操作步骤:

downWaterPhoto() { //保存到相册
var that = this
uni.saveImageToPhotosAlbum({
filePath: that.initImgSrc,
success: function() {
uni.showToast({
title: “保存成功”,
icon: “none”
});
},
fail: function(err) {
if (err.errMsg == ‘saveImageToPhotosAlbum:fail No Permission’) {
that.getAlbumAuth()
} else {
uni.showToast({
title: “保存失败,请稍后重试”,
icon: “none”
});
}
//that.getAlbumAuth()
console.log(err)
},
})
},


### 预期结果:

成功


### 实际结果:

失败


9 回复

升级4.36依旧存在无法保存图片视频到相册


发一个示例,我这边看一下

回复 DCloud_Android_zl: 目前测试的这不行的机器都是 安卓14的

回复 DCloud_Android_zl: 有结果了吗?是哪边的问题?

在针对uni-app在小米手机上真机运行或打包后无法保存图片到相册的问题时,通常这涉及到Android权限管理以及uni-app的API使用。下面是一个具体的代码示例,演示如何在uni-app中请求保存图片到相册所需的权限,并使用uni-app提供的API来保存图片。

1. 请求权限

首先,确保你的应用已经声明了必要的权限。在manifest.json文件中添加以下权限配置:

"mp-weixin": { // 这里以微信小程序为例,其他平台类似
    "appid": "your-app-id",
    "setting": {
        "requestDomain": [],
        "permission": {
            "scope.writePhotosAlbum": {
                "desc": "你的应用需要保存图片到相册"
            }
        }
    }
},
"plus": {
    "distribute": {
        "android": {
            "permissions": [
                "android.permission.WRITE_EXTERNAL_STORAGE"
            ]
        }
    }
}

2. 动态请求权限(针对Android 6.0及以上)

在保存图片之前,你需要检查并请求保存图片到相册的权限。这里使用uni-app的plus.android.requestPermissions方法(仅适用于5+ App):

function requestSaveImagePermission() {
    #ifdef APP-PLUS
    const main = plus.android.runtimeMainActivity();
    const permissions = ['android.permission.WRITE_EXTERNAL_STORAGE'];
    main.requestPermissions(permissions, function(event) {
        for (let i = 0; i < event.deniedAlways.length; i++) {
            console.error('Permission denied: ' + event.deniedAlways[i]);
        }
        for (let i = 0; i < event.granted.length; i++) {
            console.log('Permission granted: ' + event.granted[i]);
            // 权限已授予,执行保存图片操作
            saveImageToAlbum();
        }
    });
    #endif
}

3. 保存图片到相册

使用plus.io.resolveLocalFileSystemURLfileEntry.createWriter方法保存图片:

function saveImageToAlbum() {
    const imagePath = '_www/images/sample.jpg'; // 图片路径
    plus.io.resolveLocalFileSystemURL(imagePath, function(entry) {
        entry.file(function(file) {
            const reader = new FileReader();
            reader.readAsArrayBuffer(file);
            reader.onloadend = function(e) {
                const base64Image = 'data:image/jpeg;base64,' + btoa(String.fromCharCode(...new Uint8Array(e.target.result)));
                plus.io.saveFileToSystem({
                    path: '_documents/',
                    filename: 'sample.jpg',
                    data: base64Image,
                    success: function() {
                        plus.gallery.save(plus.io.convertLocalFileSystemURL('_documents/sample.jpg'), {}, function() {
                            console.log('Image saved to album successfully');
                        }, function(e) {
                            console.error('Failed to save image: ' + e.message);
                        });
                    },
                    fail: function(e) {
                        console.error('Failed to save file: ' + e.message);
                    }
                });
            };
        });
    }, function(e) {
        console.error('Failed to resolve file URL: ' + e.message);
    });
}

以上代码示例展示了如何在uni-app中请求保存图片到相册的权限,并将图片保存到相册。注意,这些代码主要适用于5+ App环境,如果是其他平台(如小程序),则需要使用对应平台的API和权限管理方式。

回到顶部