Windows Phone 8.1应用程序中的摄像头崩溃了

时间:2015-03-11 23:01:27

标签: c# windows-phone-8.1

我有一个主页和相机页面的应用程序。 当我用相机去页面时,它开始了,一切正常。 我可以使用设备后退按钮返回主页,然后再转到相机页面,它仍然可以。我还有代码可以在手机进入睡眠状态时关闭相机或应用程序更改其可见性状态并且也可以正常工作(当e.Visible为假时停止相机并在e.Visible为真时启动它。)

当这些事件处于这个序列中时会发生问题(也可能是其他序列,但我没有完全测试它)

1. go to page with camera
2. go back to home page
3. go to page with camera again
4. app lose visibility
5. app is visible again --> crash

下面是事件的代码:

    void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
    {
      if (!e.Handled && Frame.CurrentSourcePageType.FullName == "MyApp.CamPage")
        {
            e.Handled = true;

            StopCamera();
            Frame.Navigate(typeof(Elements));
        }
    }

    private void Current_VisibilityChanged(object sender, Windows.UI.Core.VisibilityChangedEventArgs e)
    {                     
        if (Frame.CurrentSourcePageType.FullName == "MyApp.CamPage")
        {
            if (e.Visible)
            {
                StartCamera();
            }
            else
            {
                StopCamera();
            }
        }
    }

    private async void StartCamera()
    {

        if (mediaCapture == null)
        {
            // start camera 
            mediaCapture = new MediaCapture();

            DeviceInformation _deviceInformation = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture)).FirstOrDefault(d => d.EnclosureLocation != null && d.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);

            var settings = new MediaCaptureInitializationSettings();
            if (_deviceInformation != null)
                settings.VideoDeviceId = _deviceInformation.Id;

            await mediaCapture.InitializeAsync(settings);

            // rotate to see preview vertically
            mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees);

            captureElement.Source = mediaCapture;
            await mediaCapture.StartPreviewAsync();
        }          
    }

    private async void StopCamera()
    {
        if (mediaCapture != null)
        {
            await mediaCapture.StopPreviewAsync();
            captureElement.Source = null;
            mediaCapture = null;
        }
    }

当我调试代码时,我注意到在上面提到的场景中当app将其可见性更改为true时,它会转到Current_VisibilityChanged方法TWICE,并且在相机尝试启动时第二次发生崩溃。

对我来说最重要的是我的代码应该如何帮助这种情况? 但有趣的是,为什么在两种情况下都会使用该方法两次e.Visible和e.Handled具有相同的值? 当序列如下时,为什么它工作正常:

  1. 使用相机转到页面
  2. app失去知名度
  3. app再次可见 - >一切OK

0 个答案:

没有答案