屏幕解锁后相机冻结

时间:2014-11-27 03:35:34

标签: java android android-camera

我正在开发照相机应用程序,我遇到了一些麻烦:如果您锁定屏幕然后将其解锁,图像会冻结。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(layout.activity_main);

    //...

    surfaceView = (SurfaceView) findViewById(id.surfaceView);
    holder = surfaceView.getHolder();
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

    holderCallback = new HolderCallback();
    holder.addCallback(holderCallback);
}
    @Override
protected void onResume() {
    super.onResume();
    camera = Camera.open(CAMERA_ID);
}

    @Override
protected void onPause() {
    super.onPause();
    if (camera != null) {
        camera.setPreviewCallback(null);
        camera.stopPreview();
        camera.release();
        camera = null;
    }
}

CameraOverlay()是扩展SurfaceView并实现SurfaceHolder.Callback的类。 - 来自具有类似问题的帖子) 我不在任何地方使用CameraOverlay,我是否必须创建它才能在解锁屏幕后恢复预览。

我搜索过这个主题的多个帖子,但找不到任何适合我的解决方案,请帮忙。我刚刚开始为Android开发。

2 个答案:

答案 0 :(得分:1)

这是你的另一个选择。每次再次查看应用时,都会调用onResume()。问题是你在null中将预览回调设置为onPause(),然后不在你的`onResume()'中修复它。

所以将onResume()改为此:

@Override
protected void onResume() {
    super.onResume();
    camera = Camera.open(CAMERA_ID);
    holder = surfaceView.getHolder();
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    holderCallback = new HolderCallback();
    holder.addCallback(holderCallback);
}

这应该可以解决您的问题。如果不是,请告诉我

答案 1 :(得分:1)

如果是相机,所有相机初始化应该在OnResume()中完成,它应该(应该)被取消初始化并在onPause()中释放。此外,当您的应用程序转到后台时,其他应用程序将无法获取相机实例。

还有一系列要做的事情来初始化相机

1)安全地打开相机 2)设置适当的预览和图片大小 3)开始预览和初始化回调

请查看我在github上传的示例应用程序并将其用作参考 https://github.com/shrishmv/CameraTest

希望这会有所帮助

此致 Shrish