iOS蓝牙开发程序员

iOS ble4.0获取外设MAC地址技巧

2017-03-29  本文已影响88人  YW_Drenched

因为公司提出新的需求,需要在不做连接的时候获取外设的MAC地址。后来跟公司的硬件工程师讨论后,得出下面一个方法可以在不连接的时候就可以获取外设的MAC地址了。其实方法有多种。下面这篇文章有提到两种方法:(http://www.jianshu.com/p/1d6a8fc8134f) ,那么不多废话,介绍我现在使用的一种方法。

我们都知道在这个方法中可以得到扫描周围外设的相关信息(不清楚的请点击):
-(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
那么在advertisementData中有个字段kCBAdvDataLocalName",这个字段可以放你外设的名字。那么我们当时就尝试在这个字段中把MAC地址也写进来,然后iOS这边在做一点相关的字符串的筛选就行了。
直接在didDiscoverPeripheral:中添加此方法:
//    筛选设备
    [self sendPeripheralArrName:advertisementData[@"kCBAdvDataLocalName"]];

具体实现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位就是我们公司产品的名字。
                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(@"外设名字数组%@",self.deviceArr);
 
    }

以上方法仅供参考,如有错误或者误导的地方,欢迎指出。

上一篇下一篇

猜你喜欢

热点阅读