corebluetooth和ios状态

时间:2017-04-24 02:20:45

标签: ios objective-c swift core-bluetooth

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

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

问题:使用ios应用程序状态进行corebluetooth实施的最佳做法是什么?具体做法是:

  1. 用户打开应用时应该实施哪些内容? (目前:我使用保存的标识符重新连接到ble设备..但这是必要的,因为corebluetooth应自动保持与设备的连接)
  2. 当用户对应用程序进行背景时应该实现什么?
  3. 当用户从后台重新打开应用程序时应该实现什么? (我应该重新连接到设备吗?)
  4. 当用户杀死应用时应该实施什么? corebluetooth连接是否断开连接?
  5. 当电池电量低并且蓝牙被设备断电或关闭时应该实施什么?
  6. 最后:

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

1 个答案:

答案 0 :(得分:5)

以下是一些建议和最佳(我可以看到它们)的做法。这些不是一成不变的:

  1. 当用户打开应用程序时,它不一定会重新连接到设备。所以你的方法很好。但是,您应该检查应用是否要重新连接。
  2. 当用户为应用程序提供背景并且设备已连接时,设备保持连接状态。除非有一些特殊情况,否则没有什么可以实现我们稍后会找到他们。
  3. 当用户将应用程序带到前台(从后台重新打开)并且在将应用程序发送到后台之前设备已连接时,它仍然保持连接状态。所以没有什么可以实现的。
  4. 当用户杀死应用时,设备已断开连接,您无能为力。当用户再次打开应用程序时,您可以尝试重新连接到设备。
  5. 我会监控设备电池(偶尔检查一下),当电池达到临界水平时,假设为5%,请断开与设备的连接。
  6. 最后:没有必要将其实现为单身人士。虽然只有一个对象可以处理所有蓝牙连接,但非常方便。所以,我会说,单身是个不错的选择。

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

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

      再一次,所有这一切都不是刻在石头上。这就是我实现它的方式,它运行正常。