Androidのカメラの開閉

メンバー変数を持つアクティビティ付きのビデオハングアウトアプリケーションを作成しました  プライベートCameraMediaSource mCameraMediaSource;

うまく動作しますが、しばらく後にカメラがもう表示されません。その後、私はアプリ全体を殺すと、それは再び動作します。 onPause()、onResume()などのアクティビティライフサイクルメソッドでカメラを処理する方法については不明です。画像が画面上に止まると、カメラをクリアするにはどうすればいいですか?ありがとう

0
追加された
ビュー: 1
あなたは本当にもっと答えを受け入れるべきです。私の経験では、提供されたものが美しく機能します。
追加された 著者 Greyson,

1 答え

はい、カメラを解放する必要があります。 OnDestroyでは最小限ですが、おそらくOnPauseで行うほうが安全でしょう。

1.6 - 3.xにわたって私のために働いているカメラの使用のライフサイクルは次のとおりです:

  onResume:
   - get a ref to camera with Camera.open();
   - sv = (SurfaceView)this.findViewById(R.id.capture_SurfaceView);
                mHolder = sv.getHolder(); 
                mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
                mHolder.setSizeFromLayout();
                mHolder.addCallback(this); 
  surfaceChanged:
    - Camera.setPreviewDisplayHolder()
    - Camera.startPreview()
  onPause:
    - Camera.stopPreview
    - SurfaceHolder.removeCallback()
    - Camera.release()

これは、デバイスの電源を切ってからもう一度やり直す、または私のアプリがバックグラウンドになっている間、私のためにうまくいきます。

また、カメラを離してしまう可能性のある捕捉されていない例外については、十分に注意してください。そのため、カメラのハードウェアがロックアップし、アプリを強制終了して再起動してもカメラを開くことができなくなることがよくあります。その場合は、デバイスの電源を入れ直す必要があります。

3
追加された
OK。 surfaceChangedとは何ですか?
追加された 著者 Androider,
SurfaceChangedはSurfaceHolder.Callbackインターフェイスの一部です。サーフェスビューを描画する準備ができたときに通知するために使用されます。参照: developer.android.com/reference/android/view/…
追加された 著者 mmeyer,