作者:lily-SweetDream_828 | 来源:互联网 | 2023-02-05 19:14
使用corebluetooth库成功连接了我的BLE设备,并在我的ios应用程序上为其设置了某些服务的通知值.在前景和后台模式下工作正常.
我目前将设备的标识符保存到UserDefaults,并且需要ios设备始终始终连接到设备.
问题:使用ios应用程序的状态实现corebluetooth的最佳实践是什么?特别:
用户打开应用程序时应该实现什么?(目前:我使用保存的标识符重新连接到ble设备..但这是必要的,因为corebluetooth应自动保持与设备的连接)
当用户为应用程序提供背景时应该实现什么?
当用户从后台重新打开应用程序时应该实现什么?(我应该重新连接到设备吗?)
当用户杀死应用程序时应该实现什么?corebluetooth连接是否断开连接?
当电池电量低并且蓝牙被设备断电或关闭时应该实施什么?
最后:
是否有必要在单例类中实现corebluetooth库,以确保应用程序只使用一个蓝牙管理器连接到设备?
1> Max Pevsner..:
以下是一些建议和最佳(我可以看到)实践.这些不是一成不变的:
当用户打开应用程序时,它不一定会重新连接到设备.所以你的方法很好.但是,您应该检查应用是否要重新连接.
当用户为应用程序提供背景并且设备已连接时,设备将保持连接状态.除非有一些特殊情况,否则没有什么可以实现 我们稍后会找到他们.
当用户将应用程序带到前台(从后台重新打开)并且在将应用程序发送到后台之前设备已连接时,它仍然保持连接状态.所以没有什么可以实现的.
当用户杀死应用程序时,设备已断开连接,您无能为力.当用户再次打开应用程序时,您可以尝试重新连接到设备.
我会监控设备电池(偶尔检查一下),当电池达到临界水平时,假设为5%,断开与设备的连接.
最后:没有必要将其实现为单身人士.虽然只有一个对象可以处理所有蓝牙连接,但非常方便.所以,我会说,单身是一个不错的选择.
一般来说,你必须考虑两种情况:
应用程序被系统杀死(可能是因为内存压力或崩溃).当应用程序在后台被杀死时,系统将重新启动它并func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])
调用该函数.在此功能中,您应该尝试重新连接到蓝牙设备.当应用程序在前台被系统杀死时,有时(根据我的经验)将调用相同的函数.所以你应该做同样的事情.如果没有调用 - 请参阅以下段落.
该应用程序被用户杀死.在这种情况下,您无法重新启动应用程序.但是当用户再次打开它时,您应该检查最新的连接状态,并尝试在需要时重新连接到设备.由于您保存连接的设备UserDefaults
(这是正确的),您应该拥有所有需要的属性.
对于任何其他情况 - 由于蓝牙关闭(在设备上或在电话上)或由于设备超出范围而断开连接,系统将处理重新连接.所以基本上,这里没什么可做的.
再一次,所有这一切都不是刻在石头上.这就是我实现它的方式,它工作正常.