援引:http://www.jianshu.com/p/1d6a8fc8134f
iOS要獲取藍牙設備的MAC地址有兩種:一是硬件工程師開通的服務特征下有MAC的信息,我們就從通道中獲取;二是硬件工程師在掃描中設備信息中放置MAC信息,我們從有RSSI的函數中獲取
1.形如你所在其他網站上看到的在某寫板子模塊上的服務如:"A180"的,其下均有獲取到MAC的特征。此處我們略過,因為其他地方說的很清楚了,援引處也有。需要硬件配和加入服務特征。
2.就是在有RSSI的函數中獲取。
首先先讓硬件工程師在板子模塊上寫入mac 的信息。
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<NSString *, id> *)advertisementData RSSI:(NSNumber *)RSSI { //獲取mac NSLog(@"%@ ",peripheral); NSLog(@"%@ ",peripheral.name); NSLog(@"%@ ",peripheral.identifier.UUIDString); NSData *data = [advertisementData objectForKey:@"kCBAdvDataManufacturerData"]; NSString *aStr= [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // NSString *mac = [NSStringTool convertToNSStringWithNSData:data]; aStr = [aStr stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"aStr:%@",aStr); NSLog(@"advertisementData:%@",advertisementData); // 一個周邊可能會被多次發現 if (![_peripheralArr containsObject:peripheral]) { [_peripheralArr addObject:peripheral]; if ([self.delegate respondsToSelector:@selector(bleManagerUpdateDeviceList)]) { [self.delegate bleManagerUpdateDeviceList]; } } }
可以看到有一個 advertisementData ,這個字典類型的就是廣播包,這里面會有一些設備的屬性,比如設備的名字啊,服務啊等,但是都是被蘋果限制了的,所以並不是你硬件工程師想廣播什么都可以的。
這個字典里有一個:只有這個key是可以放入信息的,所以叫硬件工程師將Mac地址寫到這個字段里去,這樣你就可以在發現設備的過程中得到Mac地址了~!
key:kCBAdvDataManufacturerData