CoreBluetooth For Central (5)

CoreBluetooth For Central (5)

BLE Device >> reconnect

ReConnect BLE Device

承前面CoreBluetooth For Central (4)文章了解如何扫描BLE装置、连线、断线BLE装置后,这篇要了解的则是重新连线至BLE装置,在iOS中,当你有记录装置的Device UUID时,我们可以使用UUID直接与装置连线,省除还需要扫描装置的步骤。

取得UUID

先前文章CoreBluetooth For Central (3)中,在didDiscoverPeripheral Delegate取得可连线装置的物件CBPeripheral

//-----------start-----------
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
 NSLog(@"%",peripheral);
}

//------------end------------

CBPeripheral内容印出时会得到下面内容:

<CBPeripheral: 0x14d3f810 identifier = 9D027D39-5A77-3B6B-BC45-5A1E00115269, Name = "TI BLE Keyfob", state = disconnected>

其中identifier为装置的UUID,将它记录下来可以在重新连线中使用。

重新连线方法

重新连线的方式依照iOS版本分为两种如下:

iOS 7 以前

- (void)retrievePeripherals:(NSArray *)peripheralUUIDs

iOS 8 之后

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

iOS 7之前使用上只需利用此方法后,整个过程就会自动连线至装置,但iOS 8之后分的比较细,个人认为比较有流程,也就是需要使用此方法取得装置的CBPeripheral物件后,再利用此物件来连线,意思iOS 8需要两个流程:

  1. 取得装置CBPeripheral

  2. 连线至装置

该方法在使用时可以传入多个UUID,后续流程也相同,范例中都只针对单一BLE周边连线做说明。

使用UUID连线至装置

这里有两个版本的程式如下:

iOS 7

//-----------start-----------
    CFUUIDRef uuid = CFUUIDCreateFromString(nil, (CFStringRef) @"9D027D39-5A77-3B6B-BC45-5A1E00115269");
    [CM retrievePeripherals:[NSArray arrayWithObject:(__bridge id)(uuid) ]];
//------------end------------

iOS 8

//-----------start-----------

NSUUID *uuid = [[NSUUID UUID] initWithUUIDString:@"9D027D39-5A77-3B6B-BC45-5A1E00115269"]; NSArray *peripheralArray = [CM retrievePeripheralsWithIdentifiers:[NSArray arrayWithObject:uuid]]; //成功后会返回装置CBPeripheral物件,范例使用UUID只传入一个UUID至阵例,所以阵列返回内容只会有一个物件 if (peripheralArray.count>0) { NSLog(@"%@",[peripheralArray objectAtIndex:0]); [CM connectPeripheral:[peripheralArray objectAtIndex:0] options:nil]; }else { NSLog(@"fail"); } //------------end------------

后续的过程、Service的使用需一般方式相同,这里附带一提的是,iOS 8后将UUID改由NSUUID物件来管理使用,当然也变的比较方便。