BLE设备在应用程序终止时如何与iPhone保持连接

8
我在iOS上遇到了BLE的问题。
我的情况如下:
我正在开发连接到设备 BLE 4.0 的应用程序。我的问题在于来电功能。这个功能的场景是,在设备 BLE 和应用程序之间建立了连接后,当手机接收到电话时,我的应用程序会向 BLE 设备发送数据并使其振动和闪烁。
目前,我尝试了以下 4 种情况,其中有 3 种成功了,剩下的一种失败了:
1. 情况 1(成功):当应用程序在前台时--> 来电--> 应用程序可以向 BLE 设备发送振动和闪烁消息;
2. 情况 2(成功):当单击主页并将应用程序转到后台--> 来电--> 应用程序可以向 BLE 设备发送振动和闪烁消息;
3. 情况 3(成功):当单击主页并将应用程序转到后台并单击睡眠模式按钮--> 来电--> 应用程序可以向 BLE 设备发送振动和闪烁消息;
4. 情况 4(失败):当双击主页按钮并终止后台应用程序(从任务管理器中删除应用程序)--> 来电--> 应用程序无法向 BLE 设备发送振动和闪烁消息。
有人之前遇到过这种情况并且有任何经验或想法吗?
感谢您的支持!

我认为你夸大了问题……问题不是应用程序无法与设备通信,而是应用程序没有运行,因此无法接收来电提醒。 - jcaron
谢谢您的提前帮助!您对我的问题有什么想法吗?我认为情况4可能是设备BLE和手机需要直接通信。 - Leo
我也遇到了同样的问题?你找到解决方案了吗?@Leo - yusufonderd
你解决了这个问题吗? - Venky
1
如果应用程序被杀死,与蓝牙设备的连接也会断开。因此,应用程序无法向BLE设备发送数据。 - Sachin Vas
@Leo 我也遇到同样的问题,如果你解决了这个问题,能帮我解决一下吗? - Malleswari
1个回答

10
在iOS上,一个应用程序被完全终止有两种方式:
1.系统终止应用程序(例如,应用程序长时间未使用,系统将其杀死以节省内存)。
2.用户终止/关闭应用程序。
对于第一种情况,您需要添加对状态保留和恢复的支持。从苹果的文档存档中获取:因为状态保留和恢复已经内置到核心蓝牙中,所以您的应用程序可以选择加入此功能,要求系统保留您的应用程序中央和外围管理器的状态,并继续代表它们执行某些与蓝牙相关的任务,即使您的应用程序不再运行。当其中一个任务完成时,系统会将您的应用程序重新启动到后台,并给您的应用程序机会来恢复其状态并适当处理事件。
基本上,您需要添加代码以支持此功能,因为默认情况下未启用。请查看下面的链接,特别是“添加对状态保留和恢复的支持”一节。

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-as-possible-699d434846d2

这也间接地在文档归档中提到了: 支持后台执行的应用程序可能会被系统重新启动以处理传入事件。如果应用程序由于用户强制退出之外的任何原因而终止,则系统会在发生以下事件之一时启动该应用程序...。 希望这可以帮助到您。

这不是他想问的 :( 他问的是当用户终止应用程序时会发生什么。是否有任何方法可以像Android那样管理后台服务,尽管应用程序被用户强制退出/终止。 - Harvey Connor
3
抱歉,我误解了那部分内容。在这种情况下,应用程序实际上没有任何方法可以从终止状态恢复/重新启动。这是出于安全原因,如果存在错误或问题,并且您强制停止了该应用程序,您不希望您的应用程序以某种方式重新启动自己,否则您将陷入无限循环并永远无法完全终止有缺陷的应用程序。我将更新我的答案以反映这一点。 - Youssif Saeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接