iOS 藍牙獲取MAC地址


援引: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM