gpt4 book ai didi

ios - CoreBluetooth 外围服务在重新连接/恢复时变为空

转载 作者:行者123 更新时间:2023-12-01 18:38:16 25 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我能够成功连接到 BLE 外围设备、发现服务并订阅特征,以便在特征值发生变化时通知应用程序。只要应用程序在后台运行,所有这些都会毫无问题地发生。

但是当状态恢复发生时会出现问题。在 centralManager:willRestoreState:方法,我可以使用方法 retrieveConnectedPeripheralsWithServices: 检索以前连接的外围设备.但是当我调用 discoverServices: 时没有任何 react 检索到的外围设备上的方法。 peripheral:didDiscoverServices:方法永远不会被调用。检索到的外围设备的 services 属性的值也为 null。 iOS不缓存服务和特征吗?

注:我们的 BLE 外设最初会宣传服务。当应用程序第一次启动时,它会从外围设备读取值并将用户特定的数据写入特性。写完后,周边停止广告服务。但是固件工程师声称,即使服务被外围设备停止,从状态恢复中检索到的外围设备也应该有缓存的服务。是真的吗?

最佳答案

您是否检查了通过 retrieveConnectedPeripheralsWithServices: 检索到的外围设备的连接状态? ? CoreBluetooth 框架有一些你需要注意的怪癖,其中一个是 retrieveConnectedPeripheralsWithServices: 的行为。方法:

当您通过上述方法获取外围设备时,它们可能仅在系统级别 (iOS) 上连接,而不是在您的应用程序内(请参阅 API 文档中的讨论部分)。因此,您仍然需要在外围设备上调用 connect 才能正确使用它们。这是API documentation中的相应部分:

The list of connected peripherals can include those that are connected by other apps and that will need to be connected locally using the connectPeripheral:options: method before they can be used.



关于服务的缓存:iOS 会缓存任何发现的服务和相应的特征。只有强制 iOS 更新缓存的方法:
  • BLE 电源循环,例如,在设置应用程序中关闭和打开 BLE 或重新启动您的 iOS 设备
  • 从外围设备端通过 GAP 服务发送服务更改通知(需要事件连接)

  • 注:您还可以通过 Bluetooth Configuration Profile 从蓝牙堆栈激活日志消息。 .它们在调试 BLE 相关问题时非常有用,尤其是在涉及自定义硬件的情况下(即使日志使用起来有点麻烦)。

    关于ios - CoreBluetooth 外围服务在重新连接/恢复时变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47711346/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com