8

我在 iOS 上遇到了 BLE 问题。我的情况如下:我正在开发连接到设备 BLE 4.0 的应用程序。我的问题是来电功能。该功能的场景是设备BLE与应用程序连接后,当手机接到电话时,我的应用程序会向BLE设备发送数据并使其振动和闪烁​​。

目前我尝试了以下 4 个案例,但 3 个案例成功,其余案例失败:

  • 案例1:(成功)当应用程序在前台->来电->应用程序可以向BLE设备发送振动和闪烁​​的消息

  • 案例2:(成功)当点击主页和应用程序进入后台-->来电-->应用程序可以向BLE设备发送振动和闪烁​​的消息

  • 案例3:(成功)当点击主页和应用程序进入后台并点击睡眠模式按钮-->来电-->应用程序可以向BLE设备发送振动和灯光闪烁消息

  • 案例4:(失败)双击主页按钮并在后台终止应用程序(在任务管理器上删除应用程序)-->来电-->应用程序无法向BLE设备发送振动和灯光闪烁消息

有没有人以前遇到过这种情况并有任何经验和想法来获得帮助?

谢谢你的支持!

4

1 回答 1

9

在 iOS 上,应用程序有两种完全终止的方式:-

  1. 系统终止应用程序(因为例如应用程序长时间不使用,系统将其杀死以节省内存)。
  2. 用户终止/终止应用程序。

对于第一种情况,您需要添加对状态保存和恢复的支持。来自 Apple 的文档档案:-

由于核心蓝牙内置了状态保存和恢复功能,因此您的应用可以选择使用此功能来要求系统保留应用中央和外围管理器的状态,并继续代表它们执行某些与蓝牙相关的任务,即使在您的应用程序不再运行。当其中一项任务完成时,系统会在后台重新启动您的应用程序,并让您的应用程序有机会恢复其状态并适当地处理事件。

基本上,您需要添加代码来支持此功能,因为默认情况下未启用它。请查看下面的链接,特别是“增加对国家保护和恢复的支持”部分:-

iOS 应用的核心蓝牙后台处理

对于第二种情况,如果用户终止/终止应用程序,则应用程序无法自行恢复或重新启动。这样做有一个安全和行为原因,如果存在错误或问题并且您强制终止应用程序,您不希望您的应用程序以某种方式重新启动,否则您将在无限循环中结束并且您将永远无法完全终止有问题的应用程序。请查看以下链接,进一步解释这一点:-

https://www.raywenderlich.com/1395-state-restoration-tutorial-getting-started https://medium.com/arkulpa/ios-stay-connected-to-an-external-ble-device-as-much -尽可能-699d434846d2

文档档案中也间接提到了这一点:-

支持后台执行的应用程序可能会被系统重新启动以处理传入事件。如果应用程序因用户强制退出以外的任何原因终止,系统会在以下事件之一发生时启动应用程序...

我希望这有帮助。

于 2019-02-14T16:15:51.490 回答