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