Windows Phone上的Apache Cordova Camera Plugin(通用) - 错误:访问被拒绝

时间:2015-06-29 23:39:33

标签: cordova cordova-plugins visual-studio-cordova

我创建了一个简单的cordova应用程序并在Windows手机上测试相机插件。 我的相机插件版本为1.2.0

我可以从照片库中选择照片,但如果我尝试从照相机拍摄照片,则会出现以下错误

enter image description here

任何想法我能做什么?

THX&此致!

3 个答案:

答案 0 :(得分:3)

此问题已通过提交110b3b3修复。希望它有所帮助!

答案 1 :(得分:0)

我认为这是因为创建的图片对象被某些东西阻止,因此fileIO.readBufferAsync无法使用该对象。根据MS官方样本的测试结果,我检查了文件plugins/cordova-plugin-camera/src/windows/CameraProxy.js中的代码,我发现与MS官方样本没有太大区别。我找到的唯一一个是在CameraProxy.js中的一次调用中创建和读取的文件,但在MS示例中,它们是两次调用。

在我将以下代码更改后,它开始工作。请在我上面提到的文件中的第692行找到以下代码:

fileIO.readBufferAsync(picture).done(function(buffer) {
                    var strBase64 =encodeToBase64String(buffer);
                    picture.deleteAsync().done(function() {
                        successCallback(strBase64);
                    }, function(err) {
                        errorCallback(err);
                    });
                }, errorCallback);

并将其更改为以下代码:

var tempFolder = getAppData().temporaryFolder;
                tempFolder.getFileAsync(picture.name).done(
                    function (file) {
                        // If file exists. 
                        var a = file;
                        fileIO.readBufferAsync(picture).done(function (buffer) {
                            var strBase64 = encodeToBase64String(buffer);
                            picture.deleteAsync().done(function () {
                                successCallback(strBase64);
                            }, function (err) {
                                errorCallback(err);
                            });
                        }, errorCallback);
                    },
                    function (err) {
                        
                    }
                )

答案 2 :(得分:0)

我将CameraProxy.js中的代码更改为

 var tempFolder = getAppData().temporaryFolder;
            tempFolder.getFileAsync(picture.name).done(
                function(file) {
                    // If file exists. 
                    var a = file;

                    fileIO.readBufferAsync(picture).done(function(buffer) {
                        var strBase64 = encodeToBase64String(buffer);
                        picture.deleteAsync().done(function() {
                            successCallback(strBase64);
                        }, function(err) {
                            errorCallback(err);
                        });
                    }, errorCallback);

                },
                function(err) {

                }
            );

并得到了同样的错误。

这是我打电话来访问相机的打字稿

export function getPictureFromCamera() {
        navigator.camera.getPicture((data: string) => {
            $('#image').attr("src", "data:image/jpeg;base64," + data);
        }, error => {
            $('#error').text(error);
        },
        {
            quality: 100,
            destinationType: Camera.DestinationType.DATA_URL,
            sourceType: Camera.PictureSourceType.CAMERA,
            allowEdit: true,
            encodingType: Camera.EncodingType.JPEG,
            targetWidth: 300,
            targetHeight: 300,
            saveToPhotoAlbum: false
        });
    }

我的另一个解决方法是我可以从照片库中调用相机

enter image description here

这适合我,因为在我接受了我的应用程序代码中的图片之后。

此致