iOS App终止时如何继续扫描BLE传感器并识别传感器keyEvent
Posted
技术标签:
【中文标题】iOS App终止时如何继续扫描BLE传感器并识别传感器keyEvent【英文标题】:How to keep scanning for BLE sensors and Identify sensor keyEvent while iOS App is terminated 【发布时间】:2018-01-13 04:21:44 【问题描述】:如何在 ios 应用程序处于终止状态时继续扫描 BLE 传感器。当应用程序运行时,我能够管理多个传感器。但是,当 App 终止时,如何继续监听广告并将 Sensor 连接到 App 未运行状态。
状态保存和状态恢复已实现。后台模式Bluetooth-Central已开启
我想像 Tile 和 Chipolo 在终止状态下那样实现它。
【问题讨论】:
从后台模式开启蓝牙功能(选择目标文件)。 后台模式已开启。还使用恢复标识符 func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any])。 终止是指强制退出,还是只是在后台运行,并且可能因为它在后台运行了一段时间而终止? 被用户明确终止。即使用任务切换器强制退出 据我所知,iOS在被用户强行杀死后不会在后台重新启动应用程序。请参阅此处的“了解您的应用何时启动到后台”:developer.apple.com/library/content/documentation/iPhone/…:在大多数情况下,系统不会在用户强制退出后重新启动应用。 【参考方案1】:正常的 ble 功能无法实现您想要实现的目标:
支持后台执行的应用程序可能会被系统重新启动以处理传入事件。如果应用程序因用户强制退出以外的任何原因终止,系统会在以下事件之一发生时启动应用程序:
参考Understanding When Your App Gets Launched into the Background
tile 的工作方式是使用 iBeacon 标准(我的最佳猜测)。
iBeacon 实质上是一个 BLE。您的应用可以启动一个Region Monitoring for an iBeacon 接收区域事件(进入、退出)。如果用户杀死它,这些事件也会唤醒您的应用程序。当您的应用程序被区域输入事件唤醒时,您有 8 秒(给予或接受)来执行代码并对事件做出反应。在这段时间内,您可以启动标准 BLE 连接,以将您的 iBeacon 用作外围设备,并使您的应用对 BLE 事件保持反应。
当然,您的外围设备必须设计为支持此类行为。
【讨论】:
同意你的看法。我已经尝试了所有可能的方法来使用 BLE 来实现它。通过日志发现App确实在后台唤醒,但它是由IOS发起的。如果用户终止了应用程序。它不会唤醒。我已经看到 Chipolo 在 Range 中发送超出范围的通知,只有在我们使用 CLLocationManager 的区域监控方法时才会出现。我通过在另一部手机上创建虚拟信标,用我的应用程序对此进行了测试。然后在我的应用程序中监控这个虚拟信标。我能够在前台和后台获得近、远的通知。此时试图杀死应用程序。仍然 App 没有唤醒。 我很肯定使用 iBeacon 可以正常工作。确保您实际上是离开该地区并再次进入以开始通知。近远通知用于近距离监控。区域监控应向您提供有关进入/退出信标区域的通知。 如中篇文章中所述。我们必须以这样一种方式设计我们的硬件,即当用户强制使用 iOS App 时,它应该宣传为 iBeacon。 medium.com/arkulpa/…. 如果应用程序被系统或用户强行终止,任何人都有解决方案,我们可以连接或扫描新的外围设备吗?以上是关于iOS App终止时如何继续扫描BLE传感器并识别传感器keyEvent的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 IntentService 中进行的 BLE 扫描即使在服务被破坏时也能继续工作?