Xamarin Community Toolkit CameraView无法检测外接USB摄像头如何解决
Xamarin外接USB摄像头无法识别解决方案
- 补充AndroidManifest配置
你当前只声明了基础相机权限,缺少USB Host模式和外接相机相关的特性、权限声明,在AndroidManifest.xml的manifest节点下添加以下内容:<!-- 声明支持USB Host模式 --> <uses-feature android:name="android.hardware.usb.host" android:required="true" /> <!-- 声明相机非强制要求,适配没有内置相机的设备 --> <uses-feature android:name="android.hardware.camera" android:required="false" /> <uses-feature android:name="android.hardware.camera.external" android:required="false" /> <!-- 申请USB设备访问权限 --> <uses-permission android:name="android.permission.USB_PERMISSION" /> - 补充运行时USB权限申请
仅配置IntentFilter无法自动获取USB设备访问权限,需要在收到设备插入广播后主动申请权限:// 主Activity中处理USB设备插入事件 protected override void OnNewIntent(Intent intent) { base.OnNewIntent(intent); if (intent.Action == UsbManager.ActionUsbDeviceAttached) { var usbDevice = intent.GetParcelableExtra(UsbManager.ExtraDevice) as UsbDevice; var usbManager = GetSystemService(UsbService) as UsbManager; if (!usbManager.HasPermission(usbDevice)) { var permissionIntent = PendingIntent.GetBroadcast(this, 0, new Intent("com.yourpackage.USB_PERMISSION"), PendingIntentFlags.UpdateCurrent); usbManager.RequestPermission(usbDevice, permissionIntent); } } } - 校验device_filter.xml规则
你的过滤规则可能太严格导致设备无法被匹配,先删除class、subclass、protocol属性,仅保留设备ID测试:
你也可以遍历当前已连接的USB设备,确认ID是否正确:<?xml version="1.0" encoding="utf-8" ?> <resources> <usb-device vendor-id="2431" product-id="4653"/> </resources>var usbManager = GetSystemService(UsbService) as UsbManager; foreach (var dev in usbManager.DeviceList.Values) { Android.Util.Log.Debug("USB设备信息", $"VID: {dev.VendorId}, PID: {dev.ProductId}"); } - 处理XCT CameraView的兼容问题
Xamarin Community Toolkit的CameraView默认仅枚举系统Camera2 API识别的标准摄像头,大部分UVC协议的USB摄像头不会被自动归入External分类,若以上配置完成后仍无法识别,你需要手动扩展相机逻辑:- 安卓平台侧通过Camera2 API遍历所有可用摄像头,过滤出
LENS_FACING_EXTERNAL类型的设备,手动指定摄像头ID给CameraView - 若系统Camera2 API仍无法识别到UVC摄像头,需接入Xamarin绑定的LibUVC库,直接读取USB摄像头的流进行渲染,不再依赖XCT默认的CameraView实现
- 安卓平台侧通过Camera2 API遍历所有可用摄像头,过滤出
- 确认运行时权限已授予
安卓6.0及以上版本除了清单声明,还需要在初始化相机前动态申请CAMERA权限,确认权限已被用户授予后再初始化CameraView组件。
内容的提问来源于stack exchange,提问作者Brayan Alexander Villalba
相关产品推荐
相关产品推荐

