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