卧式纯绿 2024-05-03 22:19 采纳率: 62.1%
浏览 6
已结题

安卓开发调用摄像头获取实时数据时出错

安卓开发调用摄像头获取实时数据时预览回话创建出问题

img


以上是创建会话预览的代码,是有文心一言生成,其中collection不知道是什么变量,导致后面的重写函数出错

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-03 22:19
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码片段中,存在一些错误和不完整的部分。首先,Collections.singletonlist(surface) 应该使用 Collections.singletonList(surface) 来创建一个只包含单个 Surface 的列表。其次,CameraCaptureSession.StateCallback 类型的匿名内部类定义不完整,缺少了具体的实现。为了帮您修复这个问题,我会提供一份修改后的完整代码。

    以下是修复后的 createCameraPreviewSession() 方法:

    private void createCameraPreviewSession() {
        try {
            SurfaceTexture texture = textureView.getSurfaceTexture();
            assert texture != null;
    
            // 设置textureView默认大小
            texture.setDefaultBufferSize(imageDimension.getWidth(), imageDimension.getHeight());
    
            // 创建一个Surface与textureView关联
            Surface surface = new Surface(texture);
    
            // 创建一个CaptureRequest.Builder实例
            CaptureRequest.Builder captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
            captureRequestBuilder.addTarget(surface);
    
            // 创建一个CameraCaptureSession
            List<Surface> surfaces = Collections.singletonList(surface);
            cameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() {
                @Override
                public void onConfigured(@NonNull CameraCaptureSession session) {
                    if (cameraDevice == null) return;
                    cameraCaptureSessions = session;
                    try {
                        // 创建一个CaptureRequest实例
                        captureRequest = captureRequestBuilder.build();
    
                        // 启动预览会话
                        cameraCaptureSessions.setRepeatingRequest(captureRequest, null, null);
                    } catch (CameraAccessException e) {
                        e.printStackTrace();
                    }
                }
    
                @Override
                public void onConfigureFailed(@NonNull CameraCaptureSession session) {
                    Log.e("Camera", "Preview failed");
                }
            }, null /* Handler */);
        } catch (CameraAccessException e) {
            throw new RuntimeException(e);
        }
    }
    

    这段代码修复了原始代码中的错误,并添加了一个完整的 CameraCaptureSession.StateCallback 实现。这样,当预览会话配置成功或失败时,相应的回调方法将会被触发。注意,在实际应用中,你应该根据具体需求为 onConfigureFailed 方法编写适当的处理逻辑。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月4日
  • 创建了问题 5月3日