如何为UWP的DevicePicker添加自定义BLE设备名称前缀筛选器?
解决UWP DevicePicker筛选指定开头BLE设备的问题
要实现仅显示名称以[ProductNameStart]开头的BLE设备,你需要将BLE设备的基础选择器与自定义名称筛选条件结合,而不是单独使用无效的筛选方式。以下是两种可行的实现方案:
方案1:使用DevicePickerFilter.AddClause添加筛选条件
这种方式更直观,通过API直接添加属性筛选规则:
DevicePicker devicePicker = new DevicePicker(); // 第一步:指定只筛选BLE设备 devicePicker.Filter.SupportedDeviceSelectors.Add(BluetoothLEDevice.GetDeviceSelector()); // 第二步:添加名称开头匹配的筛选规则 devicePicker.Filter.AddClause(new DevicePickerFilterClause( "System.ItemNameDisplay", DevicePickerFilterOperator.StartsWith, "[ProductNameStart]" )); // 后续正常调用ShowAsync显示选择器 var pickerResult = await devicePicker.ShowAsync(new Rect(0, 0, 100, 100));
方案2:组合AQS查询字符串
将BLE设备选择器与名称筛选的AQS语句组合成完整的查询:
// 先获取BLE设备的基础AQS选择器 string bleBaseSelector = BluetoothLEDevice.GetDeviceSelector(); // 名称开头匹配的AQS筛选 string nameFilterAqs = "System.ItemNameDisplay:~<\"[ProductNameStart]\">"; // 组合两个条件,确保同时满足 string combinedSelector = $"({bleBaseSelector}) AND ({nameFilterAqs})"; DevicePicker devicePicker = new DevicePicker(); // 添加组合后的选择器 devicePicker.Filter.SupportedDeviceSelectors.Add(combinedSelector); // 显示选择器 var pickerResult = await devicePicker.ShowAsync(new Rect(0, 0, 100, 100));
为什么之前的尝试无效?
- 直接添加
System.ItemNameDisplay相关的AQS字符串到SupportedDeviceSelectors时,没有限定设备类型为BLE,导致筛选范围不对,且单独的属性筛选无法正确生效。 BluetoothLEDevice.GetDeviceSelectorFromDeviceName方法仅支持精确匹配设备名称,不支持AQS的模糊匹配操作符(如~<),所以传入带操作符的字符串只会被当作精确名称处理,无法实现开头匹配。
内容的提问来源于stack exchange,提问作者Austin Joachim
相关产品推荐
相关产品推荐

