我有一个带有2个标签(活动)的标签活动。每个选项卡都有一个在带有相机预览的SurfaceView上绘制的3d Open GL场景。
然而,根据设备方向,正在切换标签。
问题是,当其他活动开始时,它会调用camera.open(),这会产生异常,说相机服务不可用。
实际上,问题是当活动暂停时相机不会停止,换句话说,不会为SurfaceView调用onSurfaceDestroyed()。 当onPause()调用活动时,我试图停止摄像头,但仍然得到相同的错误。
任何人都有与标签式活动相同的问题?知道如何让surfaceview被破坏吗?
答案 0 :(得分:6)
看起来这个问题很受欢迎,所以我再一次在这里添加解决方案。
根本原因是app暂停时从未为SurfaceView调用surfaceDestroyed。
所以我创建了一个包含所有子视图的framelayout。 将其设置为内容视图。 然后通过简单地调用onPause()中的setVisibility(View.GONE)和onResume()中的View.Visible来停止相机。这将导致SurfaceView的破坏。
答案 1 :(得分:3)
private SurfaceHolder.Callback mSurfaceHolderListener = new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e("TABACT", "surfaceDestroyed()");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
答案 2 :(得分:0)
这对我来说没问题:
public void surfaceDestroyed(SurfaceHolder holder) {
Log.e("TABACT", "surfaceDestroyed()");
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}