我正在使用Android SDK附带的API演示中的CameraPreview。当相机预览正在运行时,如果我关闭屏幕并再次打开它,相机预览将完全变黑。设备的相机应用程序以某种方式设法恢复相机预览,因此必须有办法。
并非我尝试过的所有设备都会出现此行为。我无法确认,但似乎操作系统版本很重要。
答案 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方法中重启相机。结果很好。