我有一个在Android上开发的工作应用程序,它与我们拥有的这个BLE设备进行通信,并且我将它移植到iOS。该设备只有一个我有兴趣听的特性。我可以成功连接,发现所需的服务和特性。在我发现这个特征后,我就是这样做的:
func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
print("Entered characteristics")
guard error != nil else {
for characteristic in service.characteristics! {
if characteristic.uuid == bufferCharUUID {
print(characteristic)
notifyCharacteristic = characteristic
bluetoothDevice.setNotifyValue(true, for: characteristic)
bluetoothDevice.writeValue(Data(bytes: getURI()), for: notifyCharacteristic, type: CBCharacteristicWriteType.withResponse)
}
}
return
}
print("Error in discovering Characteristics. Error : \(error?.localizedDescription)")
}
在Android中,这会让设备检索URI并将其写入特征,但我甚至从未收到didUpdateNotificationStateFor
回调,更不用说didUpdateValueFor
了。我也从未收到didWriteValueFor
回调,而如果我从未设置通知值,我会收到它。
发生的其他事情是,在致电setNotifyValue
后,每当我针对该特征致电readValue(for:)
或discoverDescriptors(for:)
时,我都会收到错误消息。 (如果我从未设置过Notify,当我尝试读取特征值时,它只返回我写的字节数)
错误消息如下:"此操作不允许指定的UUID。"
有关信息,在Android中我们将characteristicNotification值设置为true,然后我们将BluetoothGattDescriptor.ENABLE_INDICATION_VALUE写入描述符,但据我所知,这是由CoreBluetooth框架自动完成的,所以我只需要设置通知真。
我甚至无法理解错误所在的位置,是否存在设备兼容性问题,如果它是我在Swift上做错的话。我真的需要一个方向,所以我可以开始解决这个问题。