[使用Cordova的Camera插件捕获照片时遇到以下错误消息:
“由于失败:操作无效”
我已经尝试调试此错误,但是我不确定是什么原因导致的,并且耗尽了所有想法!
我正在测试的平板电脑设备正在运行Android 4.4.4(Nexus 7)。
奇怪的是,从图库中选择照片时,只有使用设备相机时,我才不会出现此错误。我的直觉是最近更新中的某些内容已更改。
这是我用于相机功能的代码:
/**
* Take a picture with the camera
*/
capturePhoto: function() {
navigator.camera.getPicture(PHONEGAP.onPhotoDataSuccess, PHONEGAP.onFail, {
quality: 50,
targetWidth: parseFloat($(window).outerWidth() * 1.25),
targetHeight: parseFloat($(window).outerHeight() * 1.25),
saveToPhotoAlbum: true,
correctOrientation: true,
allowEdit: true,
sourceType: Camera.PictureSourceType.CAMERA,
encodingType: Camera.EncodingType.JPEG,
destinationType: Camera.DestinationType.DATA_URL
});
navigator.camera.cleanup(onSuccess, onFail);
function onSuccess() {
console.log("Camera cleanup success.");
}
function onFail(message) {
alert('Failed because: ' + message);
}
},
非常感谢!本
问题似乎出在navigator.camera.cleanup
功能上。
我已经删除了它,并且相机现在可以正常工作。
在Android上,在本机代码调用中拍照后仍要清理。
文档指出.cleanup()
调用仅在iOS上受支持。
两者都在GitHub repository和Cordova Apache Website上。
所以Android上没有清理程序吗?答:是。
如果检查到本机世界的JS桥,您会看到,它不会检查它是否不应调用Android的清理程序。因此,他将呼叫委派给每个平台(因此也是android)。
https://github.com/apache/cordova-plugin-camera/blob/master/www/Camera.js#L182
cameraExport.cleanup = function (successCallback, errorCallback) {
exec(successCallback, errorCallback, 'Camera', 'cleanup', []);
};
在iOS上,您需要自己调用JS方法,以执行清除操作:(在Obj C代码的其他任何地方都没有调用它)
https://github.com/apache/cordova-plugin-camera/blob/master/src/ios/CDVCamera.m#L303
- (void)cleanup:(CDVInvokedUrlCommand*)command
{
// ...
}
在Android上,exec
方法仅检查takePicture
。
[https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java#L142并在其他情况下返回false。
其他任何操作均返回false并导致INVALID_ACTION错误,该错误转换为JavaScript端调用的错误回调。
仍然有一个cleanup method被称为here
private void processResultFromCamera(int destType, Intent intent) throws IOException {
...
this.cleanup(FILE_URI, this.imageUri.getFileUri(), galleryUri, bitmap);
...
}