问题
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