Commonsware相机预览演示:设备开/关后无预览

时间:2013-08-09 06:19:30

标签: android camera android-camera commonsware

我看到一个错误:当相机处于预览模式,并且用户按下开/关时,相机预览会停止并且不会启动。

一个明显的建议是看看别人做了什么;我咨过过 https://github.com/commonsguy/cw-advandroid/tree/master/Camera/Preview/ 我发现这个演示有相同的错误( Android 4.0.3 )。

指向java源码的直接链接: https://github.com/commonsguy/cw-advandroid/blob/master/Camera/Preview/src/com/commonsware/android/camera/PreviewDemo.java

问题:如何修复错误?即使在打开/关闭设备后,预览模式也必须正常工作。

UPD:如果我首先更改为另一个活动并按下该活动的开/关,则不显示该错误。

UPD2:开启/关闭后,调用startPreview(),但是我看到来自系统的消息:

D/@@    (13428): startPreview() cameraConfigured=true camera=android.hardware.Camera@412f66f0
E/CamHw ( 2135): preview window is NULL!

这意味着在系统深处确实发生了一些不好的事情(虽然消息可能是特定于设备的)。

UDP3:开启/关闭后,调用来自surfaceCallback方法。也许这会产生不同。

UPD4:[未完全看到此相机演示]如果您切换到其他应用程序(通过长按HOME并从列表中选择)然后切换回来,相机将再次工作。

1 个答案:

答案 0 :(得分:0)

这不是解决方案,而是一种解决方法: 在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);
    // ...
}

两者都有效。

我仍然不知道导致问题的原因以及原始examplelibrary之间的 区别是什么。