tl; dr我有camera2api的活动和后台服务 - 不知道如何将“流”预览传递给活动视图。
我知道如何在Activity中进行相机预览。我创建了例如SurfaceView在活动布局中,并传递其表面(通过这种方式:)
Surface surface = surfaceViewFromLayout.getHolder().getSurface();
myCameraObjWhichHandlesCamera2API.open(surface);
(当然也有代码来设置合适的大小)
作为预览目标
CameraDevice.createCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)
问题:但是如何在后台服务中使用工作捕获会话(对我来说仍然可行)并在屏幕打开时在Activity中显示预览?更多背景:我正在编写应用程序以进行计时 - 每次拍摄照片30秒。相机代码在后台服务中。我想有时打开屏幕并查找进度,并从相机中查看当前视图。
主要的是我有两个组件 - 带摄像头的Activity和Background Service,并且不知道如何通过当前的摄像头预览“stream”。
编辑:但据我所知,不可能在组件之间传递对象 - 除了parcelable / serializable,但Surface是更复杂的对象?
SurfaceTexture dummySurface = new SurfaceTexture(10);
dummySurface.setDefaultBufferSize(choosenSize.getWidth(), choosenSize.getHeight());
Surface previewSurface = new Surface(dummySurface);
// then when creating request, pass this:
cameraDevice.createCaptureSession(Arrays.asList(previewSurface, imageReader.getSurface(), stateCallback, null);
您可以考虑一些选项。请注意,我还没有尝试构建其中任何一个,所以可能还有其他我没有想到的问题。