You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ionic(v7)安卓端使用Capacitor Camera Plugin报错:无法创建照片

问题解决:Capacitor Camera Plugin 安卓端报错 "Error: Unable to create photo on disk"

针对你遇到的安卓端调用相机报错问题,可尝试以下解决方案:

1. 适配Android分区存储配置

在AndroidManifest.xml的<application>标签中添加android:requestLegacyExternalStorage="true",兼容Android 10及以上的分区存储规则:

<application
    ...
    android:requestLegacyExternalStorage="true">
    ...
</application>

2. 调整Camera调用参数

  • 降低图片质量:将quality从100改为80左右,过高的质量会生成超大文件,可能导致磁盘写入失败。
  • 更换resultType:尝试将resultType: CameraResultType.DataUrl改为CameraResultType.Uri,Uri模式直接操作文件路径,减少内存占用和磁盘写入压力:
const image = await Camera.getPhoto({
  quality: 80,
  allowEditing: true,
  resultType: CameraResultType.Uri,
  source: CameraSource.Camera,
  saveToGallery: false,
});

3. 精简不必要的权限

移除AndroidManifest中不需要的权限,避免权限冲突:

  • 若无需媒体管理功能,移除android.permission.MANAGE_MEDIA
  • Android 13+无需WRITE_EXTERNAL_STORAGE,可移除该权限(仅保留READ_MEDIA_IMAGES即可)

4. 清理并重构Android项目

  1. 移除当前安卓项目目录:rm -rf android
  2. 重新添加安卓平台:npx cap add android
  3. 同步项目配置:npx cap sync android
  4. 重新构建运行:npx cap run android

5. 确认动态权限授予

手动检查相机权限是否已授予,或在代码中提前校验权限(需安装@capacitor/permissions插件):

import { Permissions, PermissionState } from '@capacitor/permissions';

const checkCameraPermission = async () => {
  const result = await Permissions.check({ permission: 'camera' });
  if (result.state !== PermissionState.Granted) {
    const requestResult = await Permissions.request({ permission: 'camera' });
    if (requestResult.state !== PermissionState.Granted) {
      // 处理权限拒绝逻辑
      return false;
    }
  }
  return true;
};

// 调用相机前先检查权限
const hasPermission = await checkCameraPermission();
if (hasPermission) {
  // 执行相机调用逻辑
}

内容的提问来源于stack exchange,提问作者BarBarBinks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 21:22:44