3

我目前正在构建一个我想扫描可用设备的 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]);
}
4

2 回答 2

2

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

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    NSString    *thePeripheralName  = peripheral.name;
}
于 2015-04-07T17:29:56.210 回答
0

我没有答案,但我至少可以确认我在我的 iOS 应用程序中看到了同样的事情。事实上,advertisementDataTxPowerLevelKey、CBAdvertisementDataLocalNameKey 或 CBAdvertisementDataManufacturerDataKey 的数据从未有任何数据。这对苹果的实施来说是特别的吗?

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

于 2020-09-13T21:15:19.513 回答