#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. На самом деле, я не думаю, что в этом случае он есть. Я думаю, вы просто получаете сообщение об ошибке на консоли