失败,原因是:Cordova app中的操作错误无效

时间:2014-12-05 18:23:45

标签: android cordova cordova-plugins

使用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);
        }
    },

非常感谢提前! 本

2 个答案:

答案 0 :(得分:0)

问题似乎与navigator.camera.cleanup功能有关。

我已将其删除,相机现在正按预期工作。

答案 1 :(得分:0)

TLDR;

在Android上,在本机代码调用中拍照后仍然可以清理。


文档怎么说

文档指出.cleanup()调用仅在iOS上受支持。

两者都在GitHub repositoryCordova Apache Website上。

因此,Android上没有清理程序吗? 答:是的。


真正发生的事情

JavaScript

如果您检查到本机世界的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', []);
};

目标C

在iOS上,您需要自己调用JS方法,以执行清除操作: (在Obj C代码的其他任何地方都没有调用它)

https://github.com/apache/cordova-plugin-camera/blob/master/src/ios/CDVCamera.m#L303

- (void)cleanup:(CDVInvokedUrlCommand*)command
{
    // ...
}

Java

在Android上,exec方法仅检查takePicture

https://github.com/apache/cordova-plugin-camera/blob/master/src/android/CameraLauncher.java#L142并在其他情况下返回false。

Android Plugin Development

  

任何其他操作均返回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);
    ...
}