Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin-Camera类或对象阻止我的手机摄像头工作_Xamarin - Fatal编程技术网

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??照相机。打开()。我收到一条错误消息,说相机无法访问。