服务

时间:2017-07-14 06:29:34

标签: swift core-bluetooth

我试图让两个在不同设备上运行的程序通过蓝牙与CoreBluetooth相互通信。我可以从管理器中找到并连接外围设备,我可以在连接的外围设备中浏览服务,但是当我尝试发现特性时,我收到错误The specified UUID is not allowed for this operation.并且正如预期的那样,服务的特性出现了为零。

这是什么意思?我试图通过指定目标的UUID来发现特征,但两者都显示此错误。

这是打印错误的函数。

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
    print(error.localizedDescription)//prints "The specified UUID is not allowed for this operation."
    if service.characteristics != nil {
        for characteristic in service.characteristics! {
            if characteristic.uuid == CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1") {
                print("characteristic found")
                peripheral.readValue(for: characteristic)
            }
        }
    }
}

这是我寻找外围设备的地方。

    func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
    if peripheral.services != nil {
        for service in peripheral.services! {
            if service.uuid == CBUUID(string: "dc495108-adce-4915-942d-bfc19cea923f") {
                peripheral.discoverCharacteristics(nil, for: service)
            }
        }
    }
}

这是我在其他设备上添加服务特性的方式。

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true)
characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: .write, value: nil, permissions: .writeable)
service.characteristics = [characteristic]

我尝试了许多不同的属性和权限组合(包括.read / .readable),我得到了同样的错误。

1 个答案:

答案 0 :(得分:0)

您正在尝试读取已设置为只写的特征值,因此Core Bluetooth会给您一个错误; read 操作对指定的特征无效。

如果您希望您的特性具有可读性和可写性,则需要指定:

service = CBMutableService(type: CBUUID(string:"dc495108-adce-4915-942d-bfc19cea923f"), primary: true)
let characteristic = CBMutableCharacteristic(type: CBUUID(string: "A4389A32-90D2-402F-A3DF-47996E123DC1"), properties: [.write, .read], value: nil, permissions: [.writeable, .readable])
service.characteristics = [characteristic]