在Swift上调用setNotifyValue后的奇怪行为

时间:2017-03-17 16:26:47

标签: ios swift bluetooth-lowenergy core-bluetooth

我有一个在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后,每当我针对该特征致电read​Value(for:​)discover​Descriptors(for:​)时,我都会收到错误消息。 (如果我从未设置过Notify,当我尝试读取特征值时,它只返回我写的字节数)

错误消息如下:"此操作不允许指定的UUID。"

有关信息,在Android中我们将characteristicNotification值设置为true,然后我们将BluetoothGattDescriptor.ENABLE_INDICATION_VALUE写入描述符,但据我所知,这是由CoreBluetooth框架自动完成的,所以我只需要设置通知真。

我甚至无法理解错误所在的位置,是否存在设备兼容性问题,如果它是我在Swift上做错的话。我真的需要一个方向,所以我可以开始解决这个问题。

0 个答案:

没有答案