iPhone 4S 上的 Corebluetooth 故障?
Posted
技术标签:
【中文标题】iPhone 4S 上的 Corebluetooth 故障?【英文标题】:Corebluetooth glitch on iPhone 4S? 【发布时间】:2013-06-28 15:47:02 【问题描述】:我一直在广泛测试 iPhone 4s 和 iPhone 5 的 BLE 功能。
目前,我所做的只是从多个 TI BLE 密钥卡中提取广告数据,并为每个相应的设备使用 kCBAdvDataLocalName
、ManufacturingData
和 ServiceUUIDs
填充 UITableView
。
基本上,当我拉入广告数据时,我也在拉入外围设备的UUID
,并使用它来填充tableview
的datasource
数组。 (即,如果找到新的UUID
并且它不在datasource
数组中,则将其添加到数组中并使用它来检索相应的外围设备)。
使用 iPhone 5 可以完美运行。但是,当我使用 iPhone 4S 进行测试(并且我已经测试了多个)时,BLE
硬件会拉入 NULL UUIDs
,因此阻止我将任何外围设备的信息添加到 datasource
数组中。在我的控制台日志中,手机确实发现了每个外围设备,并显示了它的localname
和制造数据,但每个设备都有一个空的UUID
。
我还使用完全相同的代码同时在 4S 和 5 上运行了我的测试应用程序,它可以在 5 而不是 4S 上运行。所以我想知道是否有人遇到过同样的问题,是否是 SDK 或硬件中的错误,或者是否有已知的解决方法?任何反馈将不胜感激,谢谢。
【问题讨论】:
我认为它并没有在第一次发现时提供所有信息......我注意到,至少在我的 iPhone 4S 上,有时 Adv Data 是零......所以在添加它之前在我发现的设备数组中,我检查它是否有名称、UUID 和每个广告数据......如果没有,我不添加它,但它会在 didDiscoverPeripheral 中再次传递,这次添加了数据(更新)到它。 【参考方案1】:ios 6 中的问题是在您实际连接到设备之前不会生成 UUID。在 iOS 端为每个外围设备生成 UUID,这就是为什么在使用不同的 iOS 设备时通常会看到同一外围设备的不同 UUID。我通常检查 UUID,然后如果它是 NULL,我会离开名称。但是,如果名称为 NULL,则我不会将其填充到设备列表中。您的另一个选择是快速连接然后断开与设备的连接。一个大的时间黑客,但它会生成 UUID 然后从那时起非空。据说这个问题会在下个 iOS 版本中修复。
【讨论】:
我可以确认,在 iOS7 中,peripheral.identifier
在连接之前使用了一个唯一的 ID (NSUUID
)。以上是关于iPhone 4S 上的 Corebluetooth 故障?的主要内容,如果未能解决你的问题,请参考以下文章
某些 iPhone 4s 和 iPod Touch 上的随机 img 保存错误
indexPath.row 在 iPhone 6 模拟器上的计算不正确,但不是 4s/5/5s/6plus