6

我有一个带有 2 个选项卡(活动)的选项卡活动。每个选项卡都有一个在 SurfaceView 顶部绘制的 3d Open GL 场景,并带有相机预览。

然而,根据设备方向,选项卡正在切换。

问题是当其他activity启动时,它调用camera.open(),产生异常,说摄像头服务不可用。

实际上,问题是当活动暂停时相机并没有停止,换句话说,SurfaceView 没有调用 onSurfaceDestroyed()。当调用活动的 onPause() 时,我尝试停止摄像头,但仍然出现相同的错误。

有人对标签式活动有同样的问题吗?知道如何使surfaceview被破坏吗?

4

3 回答 3

7

看起来这个问题很受欢迎,所以我在这里再添加一次解决方案。

根本原因是当应用程序暂停时,SurfaceDestroyed 从未为 SurfaceView 调用过。

所以我创建了一个包含所有子视图的框架布局。将其设置为内容视图。然而,只需调用 onPause() 中的 setVisibility(View.GONE) 和 onResume() 中的 View.Visible 即可停止摄像头。这将导致 SurfaceView 的破坏。

于 2014-03-07T06:40:07.500 回答
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;
    }
于 2011-11-25T06:56:03.573 回答
0

这对我来说没问题:

 public void surfaceDestroyed(SurfaceHolder holder) {
        Log.e("TABACT", "surfaceDestroyed()");
        camera.stopPreview();
        camera.setPreviewCallback(null); 
        camera.release();
        camera = null;
    }
于 2015-02-17T21:47:01.237 回答