You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中使用CameraX API调用WiFi/蓝牙外接摄像头及构建CameraSelector方法

构建适配外接WiFi/蓝牙摄像头的CameraSelector实例

CameraX 依赖 Android Camera2 API,只要外接摄像头适配了Camera2兼容层,就能被CameraX识别。构建CameraSelector的核心是精准筛选出外接摄像头设备,具体实现如下:

1. 通用外接摄像头筛选逻辑

通过自定义CameraFilter区分内置与外接摄像头,兼容不同厂商的外接设备标记方式:

CameraSelector cameraSelector = new CameraSelector.Builder()
    .addCameraFilter(cameraInfos -> {
        List<CameraInfo> externalCameras = new ArrayList<>();
        for (CameraInfo info : cameraInfos) {
            CameraCharacteristics characteristics = info.getCameraCharacteristics();
            // 优先识别官方标记的外接摄像头
            Integer physicalType = characteristics.get(CameraCharacteristics.INFO_PHYSICAL_CAMERA_TYPE);
            if (physicalType != null && physicalType == CameraCharacteristics.INFO_PHYSICAL_CAMERA_TYPE_EXTERNAL) {
                externalCameras.add(info);
                continue;
            }
            // 兼容未正确标记的外接设备:排除内置前后置摄像头
            Integer lensFacing = characteristics.get(CameraCharacteristics.LENS_FACING);
            if (lensFacing == null || (lensFacing != CameraCharacteristics.LENS_FACING_BACK && lensFacing != CameraCharacteristics.LENS_FACING_FRONT)) {
                externalCameras.add(info);
            }
        }
        return externalCameras;
    })
    .build();

2. 指定具体外接摄像头(已知ID时)

如果已经通过CameraProvider.getAvailableCameraInfos()获取到目标外接摄像头的ID,可直接精准匹配:

CameraSelector cameraSelector = new CameraSelector.Builder()
    .addCameraFilter(cameraInfos -> {
        List<CameraInfo> targetCameras = new ArrayList<>();
        for (CameraInfo info : cameraInfos) {
            // 替换为实际的外接摄像头ID,比如"external_0"
            if ("your_external_camera_id".equals(info.getCameraId())) {
                targetCameras.add(info);
                break;
            }
        }
        return targetCameras;
    })
    .build();

3. 结合ImageAnalysis使用示例

构建好CameraSelector后,正常绑定ImageAnalysis用例即可实现外接摄像头图像分析:

ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
    .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
    .build();

imageAnalysis.setAnalyzer(ContextCompat.getMainExecutor(context), image -> {
    // 在这里处理外接摄像头采集的图像数据
    // 处理完成后必须调用close()释放图像资源
    image.close();
});

// 绑定到生命周期
CameraProvider cameraProvider = CameraX.getCameraProvider();
cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, imageAnalysis);

注意事项

  • 确保已申请CAMERA权限,外接摄像头同样需要该权限
  • 可通过CameraX.getCameraProvider().listenToAvailableCameras()监听外接摄像头的连接/断开状态,动态更新CameraSelector

内容的提问来源于stack exchange,提问作者Aparna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:30:01