Android SDK に付属の API Demos で CameraPreview を使用しています。カメラ プレビューの実行中に、画面をオフにして再度オンにすると、カメラ プレビューが完全に黒くなります。デバイスのカメラ アプリケーションはどうにかしてカメラ プレビューを復元することができるので、何らかの方法があるはずです。
私が試したすべてのデバイスがこの動作を示すわけではありません。確認はできませんが、OSのバージョンが関係しているようです。
Android SDK に付属の API Demos で CameraPreview を使用しています。カメラ プレビューの実行中に、画面をオフにして再度オンにすると、カメラ プレビューが完全に黒くなります。デバイスのカメラ アプリケーションはどうにかしてカメラ プレビューを復元することができるので、何らかの方法があるはずです。
私が試したすべてのデバイスがこの動作を示すわけではありません。確認はできませんが、OSのバージョンが関係しているようです。
一時停止/再開では、カメラを解放して再取得する必要があります。私の CameraView ウィジェットのコードは次のとおりです。
public void onPause(){
if(camera != null){
camera.release();
camera = null;
}
}
public void onResume(){
//Need to release if we already have one, or we won't get the camera
if(camera != null){
camera.release();
camera = null;
}
try {
camera = Camera.open();
}
catch (Exception e){
}
}
私を助けたのは、onResume() の setContentView() でした。
どちらでもかまいません
protected void onResume() {
super.onResume();
setContentView(R.layout.xxx);
// ...
}
また
private View cachedContentView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
cachedContentView = doCreateContentView(getLayoutInflater());
// ...
}
protected void onResume() {
super.onResume();
setContentView(cachedContentView);
// ...
}
どちらも機能します。
私も同じ問題を抱えていました。たぶん、それは最善の解決策ではありませんが、私にとってはうまくいきます。onPause() メソッドで、カメラ アクティビティを再開します。
private boolean isBackPreesed = false;
@Override
public void onPause() {
if (camera != null) {
camera.release();
camera = null;
}
if (!isBackPreesed) {
finish();
Intent restart = new Intent(this, this.getClass());
startActivity(restart);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
isBackPreesed = true;
}
return super.onKeyDown(keyCode, event);
}