uni-app hbuildx 4.29 在小米手机上真机运行或者打包后无法保存图片到相册
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)
},
})
},
### 预期结果:
成功
### 实际结果:
失败
升级4.36依旧存在无法保存图片视频到相册
发一个示例,我这边看一下
回复 DCloud_Android_zl: 目前测试的这不行的机器都是 安卓14的
@DCloud_Android_zl 有消息吗
在确定。
回复 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.resolveLocalFileSystemURL
和fileEntry.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和权限管理方式。