iOS 未检测到新的外围设备名称

Posted

技术标签:

【中文标题】iOS 未检测到新的外围设备名称【英文标题】:iOS does not detect new peripheral name 【发布时间】:2014-03-19 16:49:31 【问题描述】:

我们使用 CC2540 BLE 芯片作为外围设备,ios 7.0.4 iPhone 正在发挥核心作用。

我们更改了外围设备名称,但仅当我们从 iOS 设备断开连接并重新连接时才会显示此更改。

使用此代码在响应数据中更改外围设备名称在 android 中运行良好:

GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( deviceName ), deviceName );

我们正在使用此代码更改 iOS 中 GAP 层的外围设备名称:

GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );

有什么方法可以更改外围设备名称,从而无需重新连接?

【问题讨论】:

请澄清您的问题。谁扮演中心角色,谁扮演外围角色? 另一个问题。您使用什么来测试 iOS、您自己的代码或应用商店中的一些 BLE 应用? @Gabriel.Massana 抱歉,我已经编辑了我的问题。我们已经使用我们自己的代码和 LightBlue 应用程序进行了测试。我想 LightBlue 在第一张桌子上也使用了 peripheral.name 属性。 @Gabriel.Massana。它在某种程度上很有用,因为我已经检查过即使删除所有外围设备并再次扫描我仍然有旧的外围设备名称。我投票赞成你的提议。但是,我仍然无法从peripheral.name 中获得新名称。我已经设法从advertisementData: NSObject *localName = [advertisementData objectForKey: CBAdvertisementDataLocalNameKey]; 【参考方案1】:

对我来说,问题出在 iOS 应用代码中。

在 iOS 中连接到 BLE 的基本调用顺序是:

centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil
                                                    options: nil];

最后一个调用:

- (void) centralManagerDidUpdateState:(CBCentralManager *)central

那么如果 central.state 是 CBCentralManagerStatePoweredOn 你可以:

[centralManager scanForPeripheralsWithServices:nil 
                                       options:nil];

最后一个调用:

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

Apple 在此建议:“如果要对其执行任何命令,您必须保留外围设备的本地副本。”

这意味着您应该为您的 CBPeripheral 创建一个属性,例如:

self.myPeripheral = 外围设备;

这里有一个 peripheral.name 或 self.myPeripheral.name

如果您不再在代码中调用:[centralManager scanForPeripheralsWithServices:nil options:nil];您所拥有的是第一次检索到的信息。如果您想刷新名称,您应该再次拨打电话。也许有一个计时器。

希望对您有所帮助。

编辑

检查:Core Bluetooth Programming Guide: Performing Common Central Role Tasks

【讨论】:

感谢您的回复。我已经删除了所有外围设备,然后再次扫描外围设备,旧名称仍然存在。 那就是外设的问题。这是外围设备正在填充的问题。 我想我会尝试从广告数据中获取名称。【参考方案2】:

您可以从广告数据中获取本地名称。有解决办法:Incorrect BLE Peripheral Name with iOS

在 Apple 开发者论坛上,这里是 CBPeripheral name 属性的详细信息。

【讨论】:

苹果开发者论坛链接:https://forums.developer.apple.com/thread/19381

以上是关于iOS 未检测到新的外围设备名称的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iPhone 向蓝牙 LE 设备发送电子邮件、短信通知?

iOS 7 旋转设备未检测到横向屏幕边界

iOS:XCode 5 中未检测到具有 7.0.2 的设备 [重复]

首次设置 BLE 外设名称的方式和时间

在 Xcode 4.2 中未检测到具有 iOS 5.0.1 的设备

外围设备未连接到 iOS