失败,因为:Cordova应用程序中的无效操作错误

问题描述 投票:1回答:2

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

非常感谢!本

android cordova cordova-plugins
2个回答
0
投票

问题似乎出在navigator.camera.cleanup功能上。

我已经删除了它,并且相机现在可以正常工作。


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);
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.