在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上运行的弃用方法,但它是一样的。没有联系。
答案 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];
}
}