Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 屏幕关闭、屏幕打开后,相机预览完全为黑色_Android_Camera_Surfaceview - Fatal编程技术网

Android 屏幕关闭、屏幕打开后,相机预览完全为黑色

Android 屏幕关闭、屏幕打开后,相机预览完全为黑色,android,camera,surfaceview,Android,Camera,Surfaceview,我正在Android SDK附带的API演示中使用CameraPreview。当相机预览运行时,如果关闭屏幕并再次打开,相机预览将完全为黑色。该设备的摄像头应用程序以某种方式恢复摄像头预览,因此必须有一种方法 并不是我试过的所有设备都表现出这种行为。我无法确认,但似乎操作系统版本很重要。您需要在暂停/恢复中释放并重新获取摄像头。下面是我的CameraView小部件中的一些代码: public void onPause(){ if(camera != null){ came

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


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

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

}

我也有同样的问题。也许,这不是最好的解决方案,但对我来说很有效。 在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);
}

帮助我的是onResume()中的setContentView()

可以是

protected void onResume() {
    super.onResume();
    setContentView(R.layout.xxx);
    // ...
}


这两种方法都有效。

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

我正在使用API演示。他们已经在onPause和onResume中获取/释放了相机。现在还不知道。但我知道我在编写应用程序时遇到了这个问题,而这正是修复这个问题的代码。那么,你认为这是答案而不是评论有多大程度?对我来说是相同的pblm,你找到解决方案了吗?
private View cachedContentView;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cachedContentView = doCreateContentView(getLayoutInflater());
    // ...
}
protected void onResume() {
    super.onResume();
    setContentView(cachedContentView);
    // ...
}