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项目
- 移除当前安卓项目目录:
rm -rf android - 重新添加安卓平台:
npx cap add android - 同步项目配置:
npx cap sync android - 重新构建运行:
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
相关产品推荐
相关产品推荐

