【问题标题】:Apache Cordova Camera Plugin on Windows Phone (Universal) - Error: Access deniedWindows Phone(通用)上的 Apache Cordova 相机插件 - 错误:访问被拒绝
【发布时间】:2015-06-29 23:39:33
【问题描述】:

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

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

任何想法我能做什么?

THX 和问候!

【问题讨论】:

  • 有趣,我得到了同样的错误,我可以确定这是因为当我们设置除 FILE_URI 和 NATIVE_URI 之外的 destinationType 时会引发 fileIO.readBufferAsync 调用。我只是尝试使用 Microsoft 官方示例进行测试,并遇到了同样的问题。 code.msdn.microsoft.com/windowsapps/File-access-sample-d723e597
  • 我会尝试找出发生了什么并在这里更新。
  • 好吧。我的错。它确实适用于 MS 官方示例。我想我找到了解决方法。
  • 艾伦您好,感谢您的帮助。你能告诉我你的解决方法吗?问候

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


【解决方案1】:

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

【讨论】:

  • 如果您要升级到 2.0.0 版,您需要将您的 cordova-android 平台更新到 5.0.0+
【解决方案2】:

我认为这是因为创建的图片对象被某些东西阻止,因此 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) {
                        
                    }
                )

【讨论】:

    【解决方案3】:

    我将 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
            });
        }
    

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

    这对我有用,因为在我接受图片后,我又回到了我的应用代码中。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-18
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多