屏幕关闭后,屏幕打开后,相机预览完全变黑

时间:2012-11-14 19:23:53

标签: android camera surfaceview

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

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

4 个答案:

答案 0 :(得分: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){
    }

}

答案 1 :(得分: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);
    // ...
}

两者都有效。

答案 2 :(得分: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);
}

答案 3 :(得分:0)

我的解决方案是在onDesse方法中使用surfaceDestroyed方法释放相机并在surfaceCreated方法中重启相机。结果很好。