Fail to connect to camera service in Xamarin

强颜欢笑 提交于 2021-01-05 07:29:22

问题


In my Xamarin app, there is a Custom Camera Renderer. It had issue, which @Jai had resolved.

It solved all the problems, but I wasn't able to use the Front Camera, could only use Rear Camera. He suggested to use Control.Preview = Camera.Open((int)e.NewElement.Camera); instead of Control.Preview = Camera.Open();

As there are multiple pages, the first two pages has Rear Camera enable, and on the last, Front Camera. When I choose to Redo (take all the 3 Pictures, and then start again from first page), on the first & second page, app crashes and says, Java.Lang.RuntimeException: 'Fail to connect to camera service'. On Control.Preview = Camera.Open(); it didn't crash (but can't use front camera).

This code works perfectly, but only Rear Camera works. Can't use Front Camera.

Control.Preview = Camera.Open();

On this Code, the Front & Rear Camera both works. But It throws an exception Java.Lang.RuntimeException: 'Fail to connect to camera service'

Control.Preview = Camera.Open((int)e.NewElement.Camera);

Complete Code

protected override void OnElementChanged(ElementChangedEventArgs<Mobile.App.CameraPreview> e)
{
    base.OnElementChanged(e);

    if (e.OldElement != null)
    {
        // Unsubscribe
        cameraPreview.Click -= OnCameraPreviewClicked;
    }
    if (e.NewElement != null)
    {
        if (Control == null)
        {
            cameraPreview = new CameraPreview(Context);
            SetNativeControl(cameraPreview);
        }

        Control.Preview = Camera.Open((int)e.NewElement.Camera);
        //Control.Preview = Camera.Open();

        e.NewElement.Subscribe += (sender, p) =>
        {
            Control.Subscribe();
        };
        e.NewElement.Unsubscribe += (sender, p) =>
        {
            Control.Unsubscribe();
        };

        // Subscribe
        cameraPreview.Click += OnCameraPreviewClicked;
    }
}

回答1:


Release the camera after use it.

protected override void OnElementChanged(ElementChangedEventArgs<Mobile.App.CameraPreview> e)
{
    base.OnElementChanged(e);

    if (e.OldElement != null)
    {
        // Unsubscribe
        cameraPreview.Click -= OnCameraPreviewClicked;
    }
    if (e.NewElement != null)
    {
        if (Control == null)
        {
            cameraPreview = new CameraPreview(Context);
            SetNativeControl(cameraPreview);
        }

        e.NewElement.Subscribe += (sender, p) =>
        {
            Control.Preview = Camera.Open((int)e.NewElement.Camera);
            Control.Subscribe();
        };
        e.NewElement.Unsubscribe += (sender, p) =>
        {
            Control.Preview.Release();
            Control.Preview = null;
            Control.Unsubscribe();
        };

        // Subscribe
        cameraPreview.Click += OnCameraPreviewClicked;
    }
}


来源:https://stackoverflow.com/questions/65266639/fail-to-connect-to-camera-service-in-xamarin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!