我正在开发照相机应用程序,我遇到了一些麻烦:如果您锁定屏幕然后将其解锁,图像会冻结。
@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开发。
答案 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