【问题标题】:Corebluetooth glitch on iPhone 4S?iPhone 4S 上的 Corebluetooth 故障?
【发布时间】:2013-06-28 15:47:02
【问题描述】:

我一直在广泛测试 iPhone 4s 和 iPhone 5 的 BLE 功能。

目前,我所做的只是从多个 TI BLE 密钥卡中提取广告数据,并为每个相应的设备使用 kCBAdvDataLocalNameManufacturingDataServiceUUIDs 填充 UITableView

基本上,当我拉入广告数据时,我也在拉入外围设备的UUID,并使用它来填充tableviewdatasource 数组。 (即,如果找到新的UUID 并且它不在datasource 数组中,则将其添加到数组中并使用它来检索相应的外围设备)。

使用 iPhone 5 可以完美运行。但是,当我使用 iPhone 4S 进行测试(并且我已经测试了多个)时,BLE 硬件会拉入 NULL UUIDs,因此阻止我将任何外围设备的信息添加到 datasource 数组中。在我的控制台日志中,手机确实发现了每个外围设备,并显示了它的localname 和制造数据,但每个设备都有一个空的UUID

我还使用完全相同的代码同时在 4S 和 5 上运行了我的测试应用程序,它可以在 5 而不是 4S 上运行。所以我想知道是否有人遇到过同样的问题,是否是 SDK 或硬件中的错误,或者是否有已知的解决方法?任何反馈将不胜感激,谢谢。

【问题讨论】:

  • 我认为它并没有在第一次发现时提供所有信息......我注意到,至少在我的 iPhone 4S 上,有时 Adv Data 是零......所以在添加它之前在我发现的设备数组中,我检查它是否有名称、UUID 和每个广告数据......如果没有,我不添加它,但它会在 didDiscoverPeripheral 中再次传递,这次添加了数据(更新)到它。

标签: iphone objective-c xcode bluetooth core-bluetooth


【解决方案1】:

iOS 6 中的问题是在您实际连接到设备之前不会生成 UUID。在 iOS 端为每个外围设备生成 UUID,这就是为什么在使用不同的 iOS 设备时通常会看到同一外围设备的不同 UUID。我通常检查 UUID,然后如果它是 NULL,我会离开名称。但是,如果名称为 NULL,则我不会将其填充到设备列表中。您的另一个选择是快速连接然后断开与设备的连接。一个大的时间黑客,但它会生成 UUID 然后从那时起非空。据说这个问题会在下个 iOS 版本中修复。

【讨论】:

  • 我可以确认,在 iOS7 中,peripheral.identifier 在连接之前使用了一个唯一的 ID (NSUUID)。
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多