使用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);
}
},
非常感谢提前! 本
答案 0 :(得分:0)
问题似乎与navigator.camera.cleanup
功能有关。
我已将其删除,相机现在正按预期工作。
答案 1 :(得分:0)
在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);
...
}