iOS CoreBluetooth连接后丢失本地peripheral.name

时间:2015-06-01 13:23:30

标签: ios bluetooth core-bluetooth cbcentralmanager cbperipheral

我正在iOS上使用CoreBluetooth构建蓝牙应用程序。每次启动应用程序时,用户都会收到一个ID,该ID保存在Peripheral的LocalNameKey中,开始使用它进行广告并开始使用CentralManager搜索其他用户。每个用户都用他的本地名称标识,并且工作正常。

使用CentralManager,每个用户都可以将值写入另一个用户Peripheral的特征,并通知他们有关更改的信息。这也有效。 这里出现问题,在连接完成并且Peripheral执行didRecieveWriteRequests方法后,CBPeripheralManager和CBCentralMange都被重置并重新初始化。之后Peripheral的LocalNameKey不再是我的特定ID,而是iPhone的Given Name或(null)。它破坏了应用程序的整个想法,但我很确定它可以完成。

当我关闭并开启蓝牙时,它再次起作用。

这是我如何在连接后清理Central:

- (void)cleanup
{
// See if we are subscribed to a characteristic on the peripheral
if (self.peripheral.services != nil) {
    for (CBService *service in self.peripheral.services) {
        if (service.characteristics != nil) {
            for (CBCharacteristic *characteristic in service.characteristics) {
                if (characteristic.isNotifying) {
                        // It is notifying, so unsubscribe
                    [self.peripheral setNotifyValue:NO forCharacteristic:characteristic];

                        // And we're done.
                    return;
                }
            }
        }
    }
}
// If we've got this far, we're connected, but we're not subscribed, so we just disconnect
[self.manager cancelPeripheralConnection:self.peripheral];
}

这就是我重新初始化蓝牙的核心和外围设备的方式:

self.bluetoothPeripheral = nil;
self.bluetoothCentral = nil;
self.bluetoothPeripheral = [[BluetoothPeripheral alloc] initWithID:idNumber];
[self.bluetoothPeripheral loadManager];
self.bluetoothCentral = [[BluetoothCentral alloc] init];

0 个答案:

没有答案