Whatsapp或Telegram等应用程序如何在Android上收听来电/消息事件



我构建了一个VoIP呼叫应用程序,该应用程序与服务器保持持久连接以收听任何来电。我实现了一个后台服务来执行此操作。

但是自从 Oreo 以来,由于引入了后台执行限制,这个运行代码现在被破坏了

在查看论坛后,我发现有些人在建议

  1. 将服务转换为工作服务并让安卓安排它

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

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

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

WhatsApp如何在Android(奥利奥以后(中获取有关后台执行限制的来电(VOIP(?

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

此问题的解决方法是所谓的"推送通知策略"。它的工作原理如下,当服务器发送邀请时,它还会向您的应用发送 FCM 通知,这会唤醒您的应用,然后将 REGISTER 发送到您的服务器,作为回报,它会分叉对您的应用的调用。这是一个视频,可以更好地解释这个策略

有两个选项:

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

粘性(前台服务不受限制的影响。因此,您可以使用一个来替代奥利奥上的后台服务。

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

最新更新