Whatsapp或电报之类的应用程序如何监听Android上的来电/消息事件?

时间:2019-07-15 08:00:52

标签: background android-service xmpp sip android-8.0-oreo

我构建了一个VoIP呼叫应用程序,该应用程序与服务器保持持久连接以侦听任何传入呼叫。为此,我实施了后台服务。

但是自奥利奥(Oreo)以来,此运行代码由于引入了Background Execution Limits

而被破坏了。

浏览论坛后,我发现有人在建议

  1. 将服务转换为JobService并让android对其进行调度

    这样做,我的应用停止后将无法接听电话

  2. 在前台服务中运行操作

    对于某些用户而言,在通知栏中看到持续的通知很烦人。因此,上述这些选项对我来说无法为Oreo修复代码。

WhatsApp如何在Background Execution Limits周围的Android设备(奥利奥及以后)中获得来电(VOIP)?

3 个答案:

答案 0 :(得分:0)

有两种选择:

  • 使用平台推送服务(APNS或FCM)
  • 保持持久的套接字连接,并将应​​用程序从电池优化中排除。

答案 1 :(得分:0)

(粘性)前景服务不受限制的影响。因此,您可以使用其中之一替换Oreo上的后台服务。

但是前台服务有两个缺点:与后台服务相比,前台服务为了回收资源而被系统杀死的可能性较小,因此影响了Android系统的自我修复能力。并且它们要求您显示永久通知。但是用户可以抑制该通知,从而在一定程度上减轻了这一缺点。

答案 2 :(得分:0)

我假设您正在使用SIP建立连接并发起呼叫。如果没有服务不断重新发送REGISTER,则服务器发送请求时,应用程序将不会收到INVITE。

解决此问题的方法是所谓的“推送通知策略”。它的工作方式如下:当服务器发送INVITE时,它还会向您的应用程序发送FCM通知,这将唤醒您的应用程序,然后将REGISTER发送到您的服务器,服务器将返回的调用分叉到您的应用程序。 Here is a video that better explains this strategy