我试图让两个在不同设备上运行的程序通过蓝牙与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),我得到了同样的错误。
答案 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]