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

Cordova Android调用cordova-plugin-camera缺失原生相机功能选项

问题根因

默认cordova-plugin-camera调用Android相机时使用的是ACTION_IMAGE_CAPTURE标准系统意图,该意图属于轻量化拍照回调接口,设计目的仅为快速获取一张照片,厂商定制的专属功能(HDR、夜视、专业模式等)在该意图下默认会被屏蔽,只有启动完整的原生相机Activity才会显示全功能菜单。

可行解决方案

方案1:调整插件调用参数(优先尝试,无需修改源码)

调用相机时调整配置参数,关闭插件的强制精简逻辑,部分设备会自动加载全功能相机界面:

navigator.camera.getPicture(onSuccess, onFail, {
  quality: 100,
  destinationType: Camera.DestinationType.FILE_URI,
  sourceType: Camera.PictureSourceType.CAMERA,
  // 关键配置:关闭自动裁剪、方向修正等强制处理项,避免触发精简拍照模式
  allowEdit: false,
  correctOrientation: false,
  saveToPhotoAlbum: true
});

方案2:修改插件Android端源码(适配性更强)

如果调整参数无效,可直接修改插件原生代码,替换拍照意图为完整相机启动方式:

  1. 找到Android项目中插件的CameraLauncher.java文件,常规路径为platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java
  2. 定位到takePicture方法中创建Intent的代码段,做如下修改:
// 替换原有的Intent创建逻辑
// 原代码:Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent intent = getPackageManager().getLaunchIntentForPackage(getDefaultCameraPackageName());

// 新增获取系统默认相机包名的辅助方法
private String getDefaultCameraPackageName() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return resolveInfo.activityInfo.packageName;
}

修改完成后插件会直接启动完整的系统原生相机,所有厂商定制的功能菜单都会正常显示,后续只需自行从系统相册中读取最新拍摄的照片即可。

方案3:替换第三方插件

如果不想修改原生源码,可使用cordova-plugin-camera-preview自定义相机界面,也可使用cordova-plugin-intent自行配置Intent参数启动全功能相机。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:54:01