3

我正在構建一個CoreBluetooth應用程序,我想掃描可用設備,問題是「didDiscoverPeripheral」中的AdvertismentData字典不包含CBAdvertisementDataLocalNameKey - 它只包含CBAdvDataChannel和CBAdvDataIsConnectable。這意味着我無法識別我的BLE設備。CoreBluetooth AdvertisementData不包含CBAdvertisementDataLocalNameKey?

有趣的是,Lightblue應用程序(iOS BLE掃描儀)能夠顯示名稱,因此可以訪問「CBAdvertisementDataLocalNameKey」。

有誰知道我在做什麼錯?我真的把我的頭髮撕掉了!

這裏是我的代碼基本示例:

-(void)scan 
{ 

    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], CBCentralManagerScanOptionAllowDuplicatesKey, nil]; 
    [mCentralManager scanForPeripheralsWithServices:nil options:options]; 
} 

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral 
{ 
} 

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    for(id key in advertisementData) 
     NSLog(@"key=%@ value=%@", key, [advertisementData objectForKey:key]); 
} 
+0

是否在某些時候,'adverstisementData'包含密鑰?我的意思是,根據我的經驗,我可以逐個得到「整個廣告數據」,因此,如果確實有要使用的鍵,我會在列表中「保留」,只是忽略它,直到它恢復爲止。 – Larme

回答

2

而不是使用廣告數據的,請嘗試使用發現周邊的name屬性:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    NSString *thePeripheralName = peripheral.name; 
}