uniapp拍照功能点击确认后一直提示保存照片中怎么办
在uniapp中使用拍照功能时,点击确认后界面一直卡在“保存照片中”的提示状态,无法正常完成保存。尝试过重启应用和重新授权相机权限,问题依旧存在。请问该如何解决?使用的手机型号是XXX,系统版本是XXX。
2 回复
检查存储权限是否开启;清理缓存或重启应用;若仍无效,尝试更新uni-app版本或更换手机测试。
在UniApp中拍照后出现“保存照片中”提示长时间不消失,通常是由于文件保存路径、存储权限或异步处理问题导致的。以下是解决方案:
1. 检查存储权限
确保应用已获得相册/存储权限(Android需动态申请):
// 在manifest.json中配置权限
"permission": {
"scope.writePhotosAlbum": {
"desc": "用于保存图片到相册"
}
}
// 代码中动态申请(示例)
uni.authorize({
scope: 'scope.writePhotosAlbum',
success: () => {
console.log('授权成功');
this.takePhoto();
},
fail: () => {
uni.showModal({
title: '权限申请',
content: '需要相册权限保存图片,是否去设置开启?',
success: (res) => {
if (res.confirm) {
uni.openSetting();
}
}
});
}
});
2. 优化拍照代码逻辑
使用uni.chooseImage或uni.createCameraContext()时,确保正确处理回调:
// 方法一:使用chooseImage
uni.chooseImage({
count: 1,
sourceType: ['camera'],
success: (res) => {
const tempFilePath = res.tempFilePaths[0];
this.saveImage(tempFilePath);
}
});
// 方法二:使用CameraContext
const cameraContext = uni.createCameraContext();
cameraContext.takePhoto({
quality: 'high',
success: (res) => {
this.saveImage(res.tempImagePath);
}
});
// 保存图片方法
saveImage(tempFilePath) {
uni.saveImageToPhotosAlbum({
filePath: tempFilePath,
success: () => {
uni.hideLoading();
uni.showToast({ title: '保存成功', icon: 'success' });
},
fail: (err) => {
console.error('保存失败:', err);
uni.showToast({ title: '保存失败', icon: 'none' });
}
});
}
3. 添加加载状态提示
在操作期间显示加载提示,避免用户重复操作:
uni.showLoading({ title: '保存中...', mask: true });
// 在success/fail回调中调用uni.hideLoading()
4. 其他排查方向
- 文件路径问题:检查
tempFilePath是否有效 - 系统存储空间:确保设备存储空间充足
- 真机测试:在真机上测试(部分问题在模拟器不会出现)
- UniApp版本:更新到最新版本
建议操作流程:
- 先申请存储权限
- 拍照后立即显示“保存中”提示
- 使用
saveImageToPhotosAlbum保存 - 在回调中关闭提示并显示结果
如果问题持续存在,可尝试使用uni.compressImage先压缩图片再保存,或检查手机系统相册是否正常。

