屏幕锁定后,相机预览会冻结

时间:2013-05-06 10:01:27

标签: java android android-activity camera

我写过的自定义相机应用程序停止在屏幕锁定后进行预览(通过按下锁定按钮或等待几分钟)。我没有得到例外,这使得很难找到问题。

Android屏幕锁定(如果这是正确的术语)暂停/暂停/ ...我的应用程序(活动)?

如果是这种情况,原因可能是我的onPause / onResume方法吗?或者可能是另一个原因吗?

提前致谢

4 个答案:

答案 0 :(得分:31)

我遇到了同样的问题并使用以下步骤修复了它:

  1. 我创建了相机预览并将其添加到父活动的onResume()容器FrameLayout中。类似的东西:

    public void onResume{
        super.onResume();
        mCamera = Camera.open();
        if(null != mCamera){
            mCamera.setDisplayOrientation(90);
            mPreview = new CameraOverlay(getActivity(), mCamera);
            frLyParent.addView(mPreview);
        }
    }
    
  2. 我删除了onPause()中的视图。这可以解决冻结现象。

    public void onPause(){
        super.onPause();
        if(null != mCamera){
            mCamera.release();
            mCamera = null;
        }
        frLyParent.removeView(mPreview);
        mPreview = null;
    }
    
  3. 其中CameraOverlay()是扩展SurfaceView并实现SurfaceHolder.Callback的类。如果您需要实施,请告诉我。

答案 1 :(得分:7)

这是我的,它确实有效: - )

@Override
    public void onResume() {
        super.onResume();
        try {
            camera = Camera.open();
            holder.addCallback(this);
            surface.setVisibility(View.VISIBLE);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public void onPause() {
        try {
            surface.setVisibility(View.GONE);
            holder.removeCallback(this);
            camera.release();
        } catch (Exception e) {
            e.printStackTrace();
        }
        super.onPause();
    }

答案 2 :(得分:4)

谢谢,我使用了这个的修改,它也适用于我

在打开相机之前,我在mPreview.removeView(mPreview.mSurfaceView);中添加了onpause(),在mPreview.addView(mPreview.mSurfaceView);中添加了onResume()

我还在预览课程中删除了addView(mSurfaceView);

答案 3 :(得分:3)

onResume()方法中添加以下行:

surfaceView.setVisibility(View.VISIBLE);

onPaused()方法中添加以下行:

surfaceView.setVisibility(View.GONE);