gpt4 book ai didi

ios - 核心蓝牙和 ios 状态

转载 作者:搜寻专家 更新时间:2023-11-01 06:03:35 24 4
gpt4 key购买 nike

使用 corebluetooth 库成功连接了我的 BLE 设备,并在我的 ios 应用程序上为它的某些服务设置了通知值。在前景和背景模式下工作正常。

我目前将设备的标识符保存到 UserDefaults 并需要 ios 设备始终始终连接到设备。

问题:在 ios 应用程序的状态下,corebluetooth 实现的最佳实践是什么?具体来说:

  1. 当用户打开应用时应该执行什么? (目前:我使用保存的标识符重新连接到 ble 设备。但这是必要的,因为 corebluetooth 应该自动保持连接到设备)
  2. 当用户将应用设置为后台时应该执行什么操作?
  3. 当用户从后台重新打开应用程序时应该执行什么操作? (我应该重新连接到设备吗?)
  4. 当用户终止应用程序时应该执行什么? corebluetooth 连接是否断开?
  5. 当电池电量低且蓝牙断电或设备关闭时,应采取什么措施?

最后:

是否有必要在单例类中实现 corebluetooth 库以确保应用程序仅使用一个蓝牙管理器连接到设备?

最佳答案

这里有一些建议和最佳(据我所知)实践。这些不是一成不变的:

  1. 当用户打开应用时,它不一定会重新连接到设备。所以你的方法很好。但是,您应该检查该应用是否要重新连接。
  2. 当用户将应用设置为后台且设备已连接时,设备会保持连接状态。所以除非有特殊情况,否则这里没有什么可实现的。我们稍后再联系他们。
  3. 当用户将应用程序带到前台(从后台重新打开它)并且设备在应用程序发送到后台之前已连接时,它仍保持连接状态。所以这里没有什么可实现的。
  4. 当用户终止应用程序时,设备将断开连接,您无能为力。当用户再次打开应用时,您可以尝试重新连接到设备。
  5. 我会监控设备电池(偶尔检查一次),当电池电量达到临界水平时,比如说 5%,断开与设备的连接。

最后:没有必要将其实现为单例。当你只有一个对象来处理所有的蓝牙连接时,这是非常方便的。所以,我想说,单例是一个不错的选择。

一般来说,你必须考虑两种情况:

  1. 应用程序被系统终止(可能是因为内存不足或崩溃)。当应用程序在后台被杀死时,系统将重新启动它并调用 func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) 函数。在此功能中,您应该尝试重新连接到蓝牙设备。当应用程序在前台被系统杀死时,有时(根据我的经验)会调用相同的函数。所以你应该做同样的事情。未调用时 - 请参阅以下段落。
  2. 该应用已被用户终止。在这种情况下,您无法重新启动该应用程序。但是当用户再次打开它时,您应该检查最新的连接状态,并在需要时尝试重新连接到设备。由于您将连接的设备保存在 UserDefaults 中(这是正确的),您应该拥有所有需要的属性。

对于任何其他情况 - 由于蓝牙关闭(在设备或手机上)或因为设备超出范围而断开连接,系统会处理重新连接。所以基本上,这里无事可做。

再一次强调,这一切都不是一成不变的。这就是我实现它的方式,它运行良好。

关于ios - 核心蓝牙和 ios 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43578813/

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