因為公司提出新的需求川队,需要在不做連接的時候獲取外設的MAC地址聚至。后來跟公司的硬件工程師討論后,得出下面一個方法可以在不連接的時候就可以獲取外設的MAC地址了单料。其實方法有多種。下面這篇文章有提到兩種方法:(http://www.reibang.com/p/1d6a8fc8134f) 点楼,那么不多廢話扫尖,介紹我現(xiàn)在使用的一種方法。
我們都知道在這個方法中可以得到掃描周圍外設的相關信息(不清楚的請點擊):
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
那么在advertisementData
中有個字段kCBAdvDataLocalName"
,這個字段可以放你外設的名字掠廓。那么我們當時就嘗試在這個字段中把MAC地址也寫進來换怖,然后iOS這邊在做一點相關的字符串的篩選就行了。
直接在didDiscoverPeripheral:
中添加此方法:
// 篩選設備
[self sendPeripheralArrName:advertisementData[@"kCBAdvDataLocalName"]];
具體實現(xiàn)sendPeripheralArrName:
方法:
-(void)sendPeripheralArrName:(NSString *)peripheralName{
NSString *newStr = [peripheralName substringWithRange:NSMakeRange(0, 4)];
// 用來判斷的條件却盘,這個具體得看你們硬件的名字
if ([newStr isEqualToString:@"C100"] || [newStr isEqualToString:@"C200"] || [newStr isEqualToString:@"C300"] || [newStr isEqualToString:@"D100"]) {
if (![self.deviceArr containsObject:peripheralName]) {
[self.deviceArr addObject:peripheralName];
}
for (NSString *nameStr in self.deviceArr) {
if (nameStr.length >= 20) {
// 截取C1000263 即前8位狰域,這個前8位就是我們公司產(chǎn)品的名字媳拴。
NSString *devieceStr = [nameStr substringWithRange:NSMakeRange(0, 8)];
// 截取后面拼接的MAC地址
NSString *mac1 = [nameStr substringWithRange:NSMakeRange(18, 2)];
NSString *mac2 = [nameStr substringWithRange:NSMakeRange(16, 2)];
NSString *mac3 = [nameStr substringWithRange:NSMakeRange(14, 2)];
NSString *mac4 = [nameStr substringWithRange:NSMakeRange(12, 2)];
NSString *mac5 = [nameStr substringWithRange:NSMakeRange(10, 2)];
NSString *mac6 = [nameStr substringWithRange:NSMakeRange(8, 2)];
//得到的MAC地址黄橘。
NSString *macStr = [NSString stringWithFormat:@"%@:%@:%@:%@:%@:%@",mac1,mac2,mac3,mac4,mac5,mac6];
[self.peripheralName addObject:devieceStr];
[self.peripheralMac addObject:macStr];
}
}
}
[self.deviceTableView reloadData];
NSLog(@"外設名字數(shù)組%@",self.deviceArr);
}