【问题标题】:corebluetooth and ios statescorebluetooth 和 ios 状态
【发布时间】:2017-09-20 14:05:54
【问题描述】:

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

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

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

  1. 当用户打开应用程序时应该实现什么? (目前:我使用保存的标识符重新连接到 ble 设备.. 但这是必要的,因为 corebluetooth 应该自动保持连接到设备)
  2. 用户后台应用时应该实现什么?
  3. 当用户从后台重新打开应用程序时应该执行什么? (我应该重新连接到设备吗?)
  4. 当用户杀死应用程序时应该执行什么?核心蓝牙连接是否断开?
  5. 当电池电量低,蓝牙被设备掉电或关闭时,应该怎么做?

最后:

是否需要在单例类中实现 corebluetooth 库,以确保应用只使用一个蓝牙管理器来连接设备?

【问题讨论】:

  • 由于您已删除上一个问题,我还建议您阅读另一个thread。这可能对您有所帮助。
  • 感谢您的帮助,呵呵!翻阅了图书馆2天,终于发现了问题..问题是由cbcentralmanager在appdelegate中分配的位置引起的(forums.developer.apple.com/thread/53750

标签: ios objective-c swift core-bluetooth


【解决方案1】:

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

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

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

一般来说你要考虑两种情况:

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

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

再一次,这一切都不是一成不变的。我就是这样实现的,效果很好。

【讨论】:

  • 很好的回答。我对以下几点有疑问:第二和第三?您说,即使应用程序进入后台或从后台进入前台,也应该连接设备。对我来说,它在几秒钟后(或立即)断开连接。我不确定原因,因此实施方式略有不同。我曾经为后台/前台案例断开/重新连接。这很好用。请添加您的想法。谢谢。
  • "用户杀死应用时,设备断开连接,您无能为力。您可以在用户再次打开应用时尝试重新连接设备。"
  • 我只是说基于阅读here“但是,如果用户强制退出,系统不会自动启动您的应用程序。在这种情况下,用户必须重新启动您的应用程序或在系统尝试再次自动启动您的应用程序之前重新启动设备。”。我只是认为通知逻辑会适用
  • 如果用户在连接应用时关闭蓝牙,并且在操作系统暂停应用后打开蓝牙,它会启动应用吗?这里有什么特别的事情要做吗?在我的情况下,应用程序没有启动,当手动启动时外围设备卡在连接状态。
猜你喜欢
  • 1970-01-01
  • 2016-01-12
  • 1970-01-01
  • 2016-11-27
  • 2015-09-29
  • 1970-01-01
  • 2014-01-14
  • 2015-07-07
  • 2014-12-04
相关资源
最近更新 更多