1

我正在使用 Android SDK 附带的 API 演示中的 CameraPreview。在相机预览运行时,如果我关闭屏幕并再次打开,相机预览会完全变黑。设备的相机应用程序以某种方式设法恢复相机预览,因此必须有一种方法。

并非我尝试过的所有设备都表现出这种行为。我无法确认,但似乎操作系统版本很重要。

4

4 回答 4

1

您需要在暂停/恢复中释放并重新获取相机。这是我的 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){
    }

}
于 2012-11-14T19:26:09.527 回答
1

对我有帮助的是 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);
    // ...
}

他们都工作。

于 2013-09-04T05:03:09.427 回答
0

我有同样的问题。也许,这不是最好的解决方案,但它对我有用。在 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);
}
于 2013-05-04T12:27:40.457 回答
0

我的解决方案是在surfaceDestroyed 方法中释放相机,而不是在onPause 方法中,然后在surfaceCreated 方法中重新启动相机。结果很好。

于 2017-09-29T05:28:37.580 回答