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.chooseImageuni.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版本:更新到最新版本

建议操作流程:

  1. 先申请存储权限
  2. 拍照后立即显示“保存中”提示
  3. 使用saveImageToPhotosAlbum保存
  4. 在回调中关闭提示并显示结果

如果问题持续存在,可尝试使用uni.compressImage先压缩图片再保存,或检查手机系统相册是否正常。

回到顶部