.NET MAUI Windows中如何确定蓝牙设备对应的连接适配器
确定BluetoothDevice对应的BluetoothAdapter方法
首先修正你原代码的问题:原代码在循环中每次覆盖单个变量,无法保存所有适配器和设备,建议用列表存储:
// 获取所有蓝牙适配器 var adapterInfos = await DeviceInformation.FindAllAsync(BluetoothAdapter.GetDeviceSelector()); var adapters = new List<BluetoothAdapter>(); foreach (var info in adapterInfos) { var adapter = await BluetoothAdapter.FromIdAsync(info.Id); if (adapter != null) adapters.Add(adapter); } // 获取所有蓝牙设备 var deviceInfos = await DeviceInformation.FindAllAsync(BluetoothDevice.GetDeviceSelector()); var devices = new List<BluetoothDevice>(); foreach (var info in deviceInfos) { var device = await BluetoothDevice.FromIdAsync(info.Id); if (device != null) devices.Add(device); }
下面是几种关联设备与适配器的实用方法:
1. 通过设备的父设备ID匹配
每个BluetoothDevice的DeviceInformation包含System.Devices.Parent属性,该属性值就是对应蓝牙适配器的ID,通过这个ID可以直接匹配到对应的适配器:
foreach (var device in devices) { if (device.DeviceInformation.Properties.TryGetValue("System.Devices.Parent", out var parentIdObj) && parentIdObj is string adapterId) { var targetAdapter = adapters.FirstOrDefault(a => a.DeviceInformation.Id == adapterId); if (targetAdapter != null) { // 设备与适配器匹配成功 Console.WriteLine($"设备「{device.Name}」对应的适配器是「{targetAdapter.Name}」"); } } }
2. 定向扫描关联仅能被单个适配器发现的设备
对于仅能被特定适配器发现的设备,你可以为每个适配器单独启动扫描,这样扫描到的设备天然属于该适配器:
// 示例针对BLE设备扫描,传统蓝牙可使用BluetoothDeviceWatcher foreach (var adapter in adapters) { var bleWatcher = new BluetoothLEAdvertisementWatcher { ScanningMode = BluetoothLEScanningMode.Active, // 可按需设置过滤条件,比如特定设备名称、UUID等 }; bleWatcher.Received += (_, args) => { // 此处扫描到的设备由当前adapter发现,直接关联 Console.WriteLine($"适配器「{adapter.Name}」发现设备: {args.BluetoothAddress:X}"); }; bleWatcher.Start(); // 按需设置扫描时长,此处示例扫描5秒 await Task.Delay(5000); bleWatcher.Stop(); }
3. 从适配器获取已连接设备
如果设备已经处于连接状态,直接通过BluetoothAdapter.ConnectedDevices属性就能获取该适配器下的所有已连接设备,无需额外匹配:
foreach (var adapter in adapters) { var connectedDevices = adapter.ConnectedDevices; foreach (var device in connectedDevices) { Console.WriteLine($"适配器「{adapter.Name}」已连接设备: {device.Name}"); } }
内容的提问来源于stack exchange,提问作者user7421317
相关产品推荐
相关产品推荐

