tl; dr我有camera2api的活动和后台服务 - 不知道如何将“流”预览传递给活动视图。android camera2在使用后台服务的情况下的预览面
我知道如何使相机预览活动。我创建了例如SurfaceView在活动布局,并通过它的表面(由这种方式:)
Surface surface = surfaceViewFromLayout.getHolder().getSurface();
myCameraObjWhichHandlesCamera2API.open(surface);
(ofcourse也与代码来设置适当的尺寸)
作为预览目标
CameraDevice.createCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)
问题:但怎么做才能在后台服务工作捕获会话(仍然是可行的我),显示活动预览时,屏幕上?更多内容:我正在编写应用程序制作时间戳 - 每次拍摄照片等。 30秒。相机代码在后台服务。我想有时打开屏幕,并期待进步,也看到相机的当前视图。
主要的事情是,我有两个组成部分 - 活动和后台服务与摄像头,并且不知道如何通过当前的摄像头预览“流”。
- 如果我可以将Activity对象从Activity布局传递给后台服务组件,如果Activity通过关闭屏幕来销毁 - Surface也可能被销毁,从而捕获会话。
编辑:但是,从我知道,这是不可能通过组件之间的对象 - 除了parcelable /序列化,但表面是相当复杂的对象?
- 别通布局的表面到后台服务相机,但创建在后台服务虚设表面(代码下面) - 但如何传递部件之间的“流”,设置在Activity中的SurfaceView。
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);