2017-11-30 6 views
1

私は懐中電灯をオンにするアプリケーションを書いています。私の唯一の問題は、私のアプリを開くたびに、私の電話カメラのオプションが機能しなくなる - それは私のカメラをもう開くことができないということです。カメラは、私が自分のアプリケーションを殺す場合にのみ動作します。ここに私のコードです:Xamarin - カメラのクラスやオブジェクトが私の電話カメラの動作を妨げます

public static Camera camera = null; 

私は私のOFFボタンで私のONボタンで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; 
     } 

答えて

1

あなたのアプリはカメラへの参照を保持しており、決してそれをリリースしていません。 LED /フラッシュをオフにすると、他のアプリでカメラを使用できるようにカメラのインスタンスを処分します。

FYI
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()に不足しているため、ユーザーに示されたことはないでしょう。

+0

ありがとうございます。それは完璧に正常に動作します。しかし、私はカメラオブジェクトを処分すると、このコードを使って再びインスタンス化できないので、.Dispose()を.release()()に置き換えました。 Camera.Open(); 。カメラにアクセスできないというエラーメッセージが表示されます。 –

関連する問題