Windows8中如何正确初始化相机?

How to initialize the camera correctly in Windows 8?

我正在尝试在 windows 8 上初始化摄像头。我已经在项目和我的 windows 8 设备上启用了网络摄像头功能。

这是我的代码:

var dialog = new Windows.Media.Capture.CameraCaptureUI();
var aspectRatio = { width: 1, height: 1 };

dialog.photoSettings.croppedAspectRatio = aspectRatio;
dialog.captureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.photo).done(function (file) {
    if (file) {
        editPreviewPicture(file);
        mainApp.pictureAccept('control');
    } else {

    }
}, function (e) {
    console.log("Error while opening camera: ", e);
});

在 'captureFileAsync' 的线上,我收到以下错误:

Runtime-error JavaScript: Access Denied.

我已经仔细检查了所有需要的东西,甚至下载了示例项目来检查代码和测试相机,在那个项目中一切正常。

提前致谢。

我发现了问题。

以上函数在此代码块中:

WinJS.UI.Pages.define("/pages/queue/view.html", {

    ready: function (element, options) {

    }
}

问题是:ready回调是针对DOM元素的,不是针对javascript的,所以它还在处理aSync代码,WinJS无法正确处理多个aSync进程。这就是为什么我得到 'Access denied'.

现在解决这个问题。您需要创建一个带有超时的承诺,如下所示:

WinJS.Promise.timeout(500).then(
    function (complete) {
        // Camera initialization / Other aSync code here
    },

    function (error) { }
 );

希望这对一些人有所帮助!