ios 7 ble无法重新连接配对设备

时间:2013-09-25 15:45:24

标签: ios7 core-bluetooth bluetooth-lowenergy

在ios 6上,没问题,我可以重新连接成对的蓝牙设备

我用

- (void)retrievePeripherals:(NSArray *)peripheralUUIDs 

和代表

- (void)centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals

返回一系列外围设备。我遍历这个数组,并成功连接每个外设。

on ios 7,

- (void)retrievePeripherals:(NSArray *)peripheralUUIDs 

已弃用。 好的,我为ios 7使用了一种新方法:

- (NSArray *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers

此方法返回一组外围设备。我遍历那个数组并尝试连接每个外设,但它不起作用。

ios 7方法返回的外设日志:

"<CBPeripheral: 0x176e5f50 identifier = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, Name = \"Name\", state = disconnected>"

如果我再次调用retrievePeripheralsWithIdentifiers,则外设状态将更改为:

"<CBPeripheral: 0x176e5f50 identifier = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, Name = \"Name\", state = connecting>"

但没有任何反应

我尝试使用在ios6上运行的弃用方法,但它是一样的。没有联系。

3 个答案:

答案 0 :(得分:2)

您需要发布实际连接到这些外围设备的方式,以确保这一点,但新的iOS 7方法没有问题。我假设您正在传递CFUUIDRef's(就像我们为iOS 6所做的那样),而不是使用新的NSUUID参数。

以下是您需要做的事情:

NSUUID *uuid = [[NSUUID alloc]initWithUUIDString:savedUUID];//where savedUUID is the string version of the NSUUID you've saved somewhere

NSArray *peripherals = [_cbCentralManager retrievePeripheralsWithIdentifiers:@[uuid]];

for(CBPeripheral *periph in peripherals)
{
    [_cbCentralManager connectPeripheral:peripheral options:nil];
}

注意:如果您处于连接状态,请在连接外围设备之前致电cancelPeripheralConnection:

答案 1 :(得分:0)

您的代码并没有多说,但要连接到从retrievePeripheralsWithIdentifiers检索到的外围设备,您需要先扫描然后再连接。

答案 2 :(得分:0)

您不应该在viewDidLoad重新连接CBCentralManager状态为未知

当状态为centralManagerDidUpdateState

时,您应该在CBCentralManagerStatePoweredOn方法中执行此操作

代码:

- (void)centralManagerDidUpdateState:(CBCentralManager *)central
{

    NSLog(@"state - %ld",(long)[central state]);


    if ([central state] == CBCentralManagerStatePoweredOn) {

        [self tryToReconnect];

    }
}

帮助方法:

- (void)tryToReconnect
{

    NSArray * peripherals = [_centralManager retrievePeripheralsWithIdentifiers:@[[CBUUID UUIDWithString:@"savedUdidString"]]];


    if (peripherals.count > 0) {

        CBPeripheral * peripheral = [peripherals firstObject];

        self.peripheral = peripheral;

        self.peripheral.delegate = self;

        [_centralManager connectPeripheral:peripheral options:nil];

    }
}