- 建立中心管家
// 1. 創(chuàng)建中心管家,并且設(shè)置代理
self.cmgr = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
- 建立中心管家
- 掃描外設(shè)(discover)
// 2. 在代理方法中掃描外部設(shè)備
/** - scanForPeripheralsWithServices :如果傳入指定的數(shù)組歧蕉,那么就只會(huì)掃描數(shù)組中對(duì)應(yīng)ID的設(shè)備
如果傳入nil蒸痹,那么就是掃描所有可以發(fā)現(xiàn)的設(shè)備
- 掃描完外部設(shè)備就會(huì)通知CBCentralManager的代理
*/
- (void)centralManagerDidUpdateState:(CBCentralManager )central
{
if ([central state] == CBCentralManagerStatePoweredOn) {
[self.cmgr scanForPeripheralsWithServices:nil options:nil];
}
}
/*
- 發(fā)現(xiàn)外部設(shè)備榛鼎,每發(fā)現(xiàn)一個(gè)就會(huì)調(diào)用這個(gè)方法
- 所以可以使用一個(gè)數(shù)組來存儲(chǔ)每次掃描完成的數(shù)組
*/
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI
{
// 有可能會(huì)導(dǎo)致重復(fù)添加掃描到的外設(shè)
// 所以需要先判斷數(shù)組中是否包含這個(gè)外設(shè)
if(![self.peripherals containsObject:peripheral]){
[self.peripherals addObject:peripheral];
}
}
- 連接外設(shè)
/** - 模擬開始連接方法
*/
- (void)start
{
// 3. 連接外設(shè)
for (CBPeripheral *ppl in self.peripherals) {
// 掃描外設(shè)的服務(wù)
// 這個(gè)操作應(yīng)該交給外設(shè)的代理方法來做
// 設(shè)置代理
ppl.delegate = self;
[self.cmgr connectPeripheral:ppl options:nil];
}
}
- 掃描外設(shè)中的服務(wù)和特征
- 服務(wù)和特征的關(guān)系
`每個(gè)藍(lán)牙4.0的設(shè)備都是通過服務(wù)和特征來展示自己的黄鳍,一個(gè)設(shè)備必然包含一個(gè)或多個(gè)服務(wù)增炭,每個(gè)服務(wù)下面又包含若干個(gè)特征。
/**
- 服務(wù)和特征的關(guān)系
- 連接外設(shè)成功調(diào)用
*/
- (void)centralManager:(CBCentralManager )central didConnectPeripheral:(CBPeripheral )peripheral
{
// 查找外設(shè)服務(wù)
[peripheral discoverServices:nil];
}
/
- 發(fā)現(xiàn)服務(wù)就會(huì)調(diào)用代理方法
- @param peripheral 外設(shè)
*/
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{
// 掃描到設(shè)備的所有服務(wù)
NSArray *services = peripheral.services;
// 根據(jù)服務(wù)再次掃描每個(gè)服務(wù)對(duì)應(yīng)的特征
for (CBService *ses in services) {
[peripheral discoverCharacteristics:nil forService:ses];
}
}
- 與外設(shè)做數(shù)據(jù)交互
- 在指定的特征下做相應(yīng)的操作
/**
- 在指定的特征下做相應(yīng)的操作
- 發(fā)現(xiàn)服務(wù)對(duì)應(yīng)的特征
*/
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
// 服務(wù)對(duì)應(yīng)的特征
NSArray *ctcs = service.characteristics;
// 遍歷所有的特征
for (CBCharacteristic *character in ctcs) {
// 根據(jù)特征的唯一標(biāo)示過濾
if ([character.UUID.UUIDString isEqualToString:@"XMG"]) {
NSLog(@"可以吃飯了");
}
}
}
- 斷開連接
/** - 斷開連接
*/
- (void)stop
{
// 斷開所有連接上的外設(shè)
for (CBPeripheral *per in self.peripherals) {
[self.cmgr cancelPeripheralConnection:per];
}
}