BLE WriteCharacteristicValue никогда не вызывает

#ios #xamarin.ios #bluetooth-lowenergy

#iOS #xamarin.ios #bluetooth-низкое энергопотребление

Вопрос:

Я пишу приложение для iOS с помощью Xamarin.iOS, но ответ на родной iOS также будет оценен. Мое приложение использует характеристику записи BLE для отправки сообщений между устройствами. Мой код для создания и добавления службы в CBPeripheralManager:

 _cbPeripheralManager.WriteRequestsReceived  = WriteRequestReceived; // WriteRequestReceived is never called

// my read characteristic actually works fine
_readCharacteristic = new CBMutableCharacteristic(CBUUID.FromString(MyReadCharacteristicUuid), CBCharacteristicProperties.Read | CBCharacteristicProperties.Notify, null, CBAttributePermissions.Readable);

// but my write characteristic doesn't work when i try to write to it
_writeCharacteristic = new CBMutableCharacteristic(CBUUID.FromString(MyWriteCharacteristicUuid), CBCharacteristicProperties.Write | CBCharacteristicProperties.Notify, null, CBAttributePermissions.Writeable);

_service = new CBMutableService(CBUUID.FromString(MyServiceUuid), true);
_service.Characteristics = new CBCharacteristic[2] { _readCharacteristic, _writeCharacteristic };

_cbPeripheralManager.AddService(_service);
  

И мой код для записи в характеристику периферийного устройства (для простоты не отображается код для обнаружения устройств и служб / характеристик)

 peripheral.WroteCharacteristicValue  = handler; // handler is never called
peripheral.WriteValue(NSData.FromString("hello"), characteristic, CBCharacteristicWriteType.WithoutResponse);
  

Есть идеи, в чем может быть проблема?

Комментарии:

1. Вы пишете без ответа . Вам нужно написать с ответом для вызова обработчика developer.apple.com/documentation/corebluetooth /…

2. Мой WriteRequestReceived обработчик никогда не вызывается.

3. вы должны реализовать обработчик ошибок. Вы получите сообщение об ошибке, потому что вы выполняете запись без ответа, но ваша характеристика записи поддерживает только запись с ответом

4. Просто мне пришлось изменить CBCharacteristicProperties.Write CBCharacteristicProperties.WriteWithoutResponse значение как на отправляющей, так и на принимающей стороне. Если вы опубликуете это как ответ, я приму его. Кстати, где находится обработчик ошибок? Я не могу его найти

5. На самом деле, я не думаю, что в этом случае он есть. Я думаю, вы просто получаете сообщение об ошибке на консоли