CoreBluetooth在重新连接时不会发现服务

时间:2015-02-02 19:36:57

标签: ios core-bluetooth

我们有一个与我们自己的BLE设备通信的应用。当我们推送新固件时,我们重新启动,我们得到centralManager: didDisconnectPeripheral: error:centralManager: didConnectPeripheral:但是当我们拨打[peripheral discoverServices:nil]时,我们永远无法收到peripheral: didDiscoverServices:的回调。我们在最初连接时得到它,但在重新连接时却没有。 CoreBluetooth似乎知道服务和特性是什么,因为我们可以与设备进行交互,但我们希望能够在重启后立即编写特性,但无法找到可靠的方法来判断它是什么时候。

- =编辑= - 这是我们用于编写特征的代码。当我们尝试在第二次调用didConnect时调用它时,它会失败,因为外围设备没有任何服务:

+(void)writeData:(NSData*)data toPeripheral:(CBPeripheral*)peripheral service:(NSString*)sCBUUID characteristic:(NSString*)cCBUUID
{
    // Sends data to BLE peripheral to process HID and send EHIF command to PC
    for(CBService *service in peripheral.services)
    {
        if([service.UUID.stringValue isEqualToString:sCBUUID])
        {
            for(CBCharacteristic *characteristic in service.characteristics)
            {
                if([characteristic.UUID.stringValue isEqualToString:cCBUUID])
                {
                    /* EVERYTHING IS FOUND, WRITE characteristic ! */
                    [peripheral writeValue:data forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];
                    return;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

我记得在我使用CoreBluetooth的工作中,这种行为是有意的,因为它是以这种方式记录的。断开连接后,我们不应重用相同的外围设备实例。 Instead we should ask CBCentralManager to give us a fresh CBPeripheral using its known peripheral UUID.另请参阅:CBCentralManager.retrievePeripheralsWithIdentifiers: