Xamarin-Camera类或对象阻止我的手机摄像头工作
我写了一个可以打开手电筒的应用程序。我唯一的问题是,每次我打开我的应用程序,我的手机摄像头选项都会停止工作——也就是说,我不能再打开我的摄像头了。只有在我关闭应用程序时,相机才会开始工作。这是我的密码:Xamarin-Camera类或对象阻止我的手机摄像头工作,xamarin,Xamarin,我写了一个可以打开手电筒的应用程序。我唯一的问题是,每次我打开我的应用程序,我的手机摄像头选项都会停止工作——也就是说,我不能再打开我的摄像头了。只有在我关闭应用程序时,相机才会开始工作。这是我的密码: public static Camera camera = null; 我在“打开”按钮中调用TurnCameraOn(),在“关闭”按钮中调用TurnCameraOff private void TurnCameraOn() { if (CameraA
public static Camera camera = null;
我在“打开”按钮中调用TurnCameraOn(),在“关闭”按钮中调用TurnCameraOff
private void TurnCameraOn()
{
if (CameraAvailable() == true)
{
if (camera == null)
camera = Camera.Open();
Camera.Parameters parameters = camera.GetParameters();
parameters.FlashMode = Camera.Parameters.FlashModeTorch;
camera.SetParameters(parameters);
Android.Graphics.SurfaceTexture mPreviewTexture = new Android.Graphics.SurfaceTexture(0);
camera.SetPreviewTexture(mPreviewTexture);
camera.StartPreview();
cameraFlashLightOnThread = true;
}
}
private void TurnCameraOff()
{
if (CameraAvailable() == true)
{
if (camera == null)
camera = Camera.Open();
Camera.Parameters parameters = camera.GetParameters();
parameters.FlashMode = Camera.Parameters.FlashModeOff;
camera.SetParameters(parameters);
camera.StopPreview();
cameraFlashLightOnThread = false;
}
}
private bool CameraAvailable()
{
bool availale = true;
if (PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureCamera) == false)
{
availale = false;
Toast.MakeText(this, "No back-facing camera available", ToastLength.Long);
}
if (PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureCameraFlash) == false)
{
availale = false;
Toast.MakeText(this, "No camera flash available", ToastLength.Long);
}
return availale;
}
你的应用程序保存了对相机的引用,并且从未释放过它。当您关闭LED/闪光灯时,请丢弃您的相机实例,以便其他应用程序可以使用该相机 比如:
private void TurnCameraOn()
{
if (CameraAvailable())
{
camera = camera ?? Camera.Open();
using (var parameters = camera.GetParameters())
{
parameters.FlashMode = Camera.Parameters.FlashModeTorch;
camera.SetParameters(parameters);
Android.Graphics.SurfaceTexture mPreviewTexture = new Android.Graphics.SurfaceTexture(0);
camera.SetPreviewTexture(mPreviewTexture);
camera.StartPreview();
}
cameraFlashLightOnThread = true;
}
}
private void TurnCameraOff()
{
if (CameraAvailable())
{
camera = camera ?? Camera.Open();
using (var parameters = camera.GetParameters())
{
parameters.FlashMode = Camera.Parameters.FlashModeOff;
camera.SetParameters(parameters);
camera.StopPreview();
camera.Dispose();
camera = null;
}
cameraFlashLightOnThread = false;
}
}
仅供参考:您的
Toast
语句缺少.Show()
,因此不会向用户显示。谢谢。它工作得非常好。但是我将.Dispose()替换为.release(),因为一旦我处理了camera对象,我就不能使用以下代码再次实例化它:camera=camera??照相机。打开()。我收到一条错误消息,说相机无法访问。