无法将数据发送到特征

时间:2016-09-20 20:20:22

标签: ios swift bluetooth-lowenergy

当远程设备更改特征值时,我可以在应用程序上收到通知,但当应用程序更新值时,远程设备将无法看到它。

所以,我知道我的特征是有效的,我也知道其他应用程序能够回写该特征(实际设备打印出来)

所以问题当然是中的

更有趣的是,每个特征都有句柄,每个特征都有自己的UUID。

iOS只会让我看到我的特色UUID,无法访问其句柄,尽管每个特征都有2个句柄,具有不同的UUID'

无论如何,在这里我得到回调并尝试回写:

 func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
    print("UPDATE FROM:" , characteristic) //good!
    sendData(data: "check")  //not good
       if characteristic.uuid.uuidString == characteristicUUID {
         if let str = NSString(data: characteristic.value!, encoding: String.Encoding.utf8.rawValue)
         {
            print("BLE:GOT:",str )
            NotificationCenter.default.post(name: Notification.Name(rawValue: "Bluetooth"), object: str)
         }
      }
}

并写着:

  func sendData(data:String)
    {
        if(peripheral != nil)
        {
             //happens for sure
            var bytesData = [UInt8](data.utf8)
            let writeData = NSData (bytes: &bytesData, length: bytesData.count)
             peripheral.writeValue(writeData as Data, for: characteristic, type: CBCharacteristicWriteType.withResponse)
        }
    }

并列出我的特征(打印1个UUID - 这是真的,我们只有1个,但它有2个不同UUID的句柄)

  func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        for charateristic in service.characteristics!
        {
               print("Found CHARACTERISTIC:",charateristic as CBCharacteristic)
        }

1 个答案:

答案 0 :(得分:2)

您应该检查为您的特征设置的特性。如果设置了CBCharacteristicPropertyWrite,则可以执行带有响应的写入。如果仅设置CBCharacteristicPropertyWriteWithoutResponse,则无法在设置writeValue的情况下执行type: CBCharacteristicWriteType.withResponse