CoreBluetooth AdvertisementData不包含CBAdvertisementDataLocalNameKey?

时间:2015-04-07 07:23:47

标签: ios objective-c bluetooth-lowenergy core-bluetooth cbcentralmanager

我目前正在构建一个我要扫描可用设备的CoreBluetooth应用程序,问题是“didDiscoverPeripheral”中的AdvertismentData字典不包含CBAdvertisementDataLocalNameKey - 它只包含CBAdvDataChannel和CBAdvDataIsConnectable。这意味着我无法识别我的BLE设备。

有趣的是,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]);
}

2 个答案:

答案 0 :(得分:2)

请尝试使用已发现外围设备的名称属性,而不是使用广告数据:

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

答案 1 :(得分:0)

我没有答案,但我至少可以确认自己在iOS应用中也看到了同样的东西。实际上,advertiseData永远不会包含CBAdvertisementDataTxPowerLevelKey,CBAdvertisementDataLocalNameKey或CBAdvertisementDataManufacturerDataKey的任何数据。这对Apple的实现来说特别重要吗?

在连接到外围设备之后,我看不到任何制造商名称数据,然后我得到org.bluetooth.characteristic.manufacturer_name_string的CBCharacteristic