Прежде всего извините за то, что я плохо знаю как стек BLE в UWP, так и саму спецификацию BLE. У меня есть приложение UWP, которое подключается к определенному типу c устройств BLE. Одна из функций, которые они предоставляют, - это характеристика c, которая при записи изменяет имя устройства.
Когда я запускаю это изменение и, следовательно, читаю характеристику DeviceName c (обратите внимание, что UUID соответствуют к стандарту):
var genericAccessServices = await SelectedDevice.GetGattServicesForUuidAsync(Guid.Parse("00001800-0000-1000-8000-00805f9b34fb"));
var genericAccessService = genericAccessServices.Services.First();
var chars = await genericAccessService.GetCharacteristicsForUuidAsync(Guid.Parse("00002a00-0000-1000-8000-00805f9b34fb"));
var deviceNameChar = chars.Characteristics.First();
var gattReadResult = await deviceNameChar.ReadValueAsync(BluetoothCacheMode.Uncached);
var reader = DataReader.FromBuffer(gattReadResult.Value);
byte formatType = 25;
var deviceNameString = BLEDeviceDescription.ReadBufferWithFormatType(reader, formatType, 20);
Debug.WriteLine($"New device name: {deviceNameString}");
Я действительно получаю изменение имени, поэтому операция прошла успешно. Однако событие NameChanged от BluetoothLEDevice не запускается.
Затем я перехожу к отключению от устройства, используя процедуру, описанную здесь .
Не закрывая приложение, я затем запускаю DevicePicker , чтобы переподключить к устройству и здесь имя не изменилось. Если я закрою приложение, а затем снова открою его, имя на короткое время мигает, но затем отображается правильно, а также если я закрою приложение, а затем попытаюсь подключиться из настроек Windows.
Как вы можете объяснить такое поведение? Кэширует ли Windows имя устройства на неопределенный срок в течение всего срока службы приложения? Почему не запускается событие NameChanged? Приветствуются любые комментарии!
РЕДАКТИРОВАТЬ: - Целевая Windows версия - 1903 (10.0; сборка 18362)