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端源码(适配性更强)
如果调整参数无效,可直接修改插件原生代码,替换拍照意图为完整相机启动方式:
- 找到Android项目中插件的
CameraLauncher.java文件,常规路径为platforms/android/app/src/main/java/org/apache/cordova/camera/CameraLauncher.java - 定位到
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
相关产品推荐
相关产品推荐

