iOS13 Reading is not permitted.

2019-10-09  本文已影响0人  四Yue大人
// 数据接收
func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
     if let error = error {
            // error返回错误 : Reading is not permitted.
            FIILPrintLog(message: "更新特征值时发生错误,错误信息--\(error.localizedDescription)")
            return
      }
}

iOS13上, 连接BLE蓝牙时候, 返回错误:Reading is not permitted.

查找问题后,发现在"搜索到特征回调"方法中,写了错误的方法导致的,返回的特征是写和通知特征, 在这个特征中,我写上了读的方法, 在iOS13以前没有影响, iOS13时候,系统报出了错误

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        // 错误地方  在iOS13以前没有影响, iOS13时候,系统报出了错误
        // 写 UUID 
        if characteristic.uuid == characteristicWriteUUID {
               // 读  (这里是不对❌, 应该写到读的uuid里面, 请看改正后的代码)
              peripheral.readValue(for: characteristic)
              if let value = characteristic.value {
              FIILPrintLog(message: "读到peripheral.readValue数据----\(NSData.init(data: value))")
                        }
         }
}

改正后的代码

    /// 搜索到特征回调
    ///
    /// - Parameters:
    ///   - peripheral: 外围设备
    ///   - service: 服务
    ///   - error: 错误信息
    func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
        
        
        if (error != nil) {
            self.delegate?.bleConnection(status: false)
            FIILPrintLog(message: "外围设备寻找特征过程中发生错误,错误信息: \(error!.localizedDescription)")
        }
        //        FIILPrintLog(message: "搜索特征")
        
        if self.bleHeaderType == .F020 {
            let serviceUUID = CBUUID.init(string: self.kServiceUUID)
            
            let characteristicWriteUUID = CBUUID.init(string: self.kCharacteristicsWriteUUID)
            let characteristicNotiUUID = CBUUID.init(string: self.kCharacteristicsNotiUUID)
            let characteristicReadUUID = CBUUID.init(string: self.kCharacteristicsReadUUID)
            
            if service.uuid == serviceUUID {
                for characteristic in service.characteristics! {
                    // 写
                    if characteristic.uuid == characteristicWriteUUID {
                        self.write = characteristic
                        // 蓝牙连接代理协议
                        self.delegate?.bleConnection(status: true)
                    // 通知
                    }else if characteristic.uuid == characteristicNotiUUID {
                        peripheral.setNotifyValue(true, for: characteristic)
                    // 读
                    }else if characteristic.uuid == characteristicReadUUID {
                        self.readOrWrite = characteristic
                        peripheral.readValue(for: characteristic)
                        if let value = characteristic.value {
                            FIILPrintLog(message: "读到peripheral.readValue数据----\(NSData.init(data: value))")
                        }
                    }
                }
            }
    }
上一篇下一篇

猜你喜欢

热点阅读