5

我正在使用 SIP 协议开发 IP 语音 (VoIP) 应用程序,该协议要求应用程序监听来电。这意味着应用程序不能休眠或死亡。

对于旧代码,似乎这样做的方法是获取PARTIAL_WAKE_LOCK

现在从 Android 6.0 及更高版本开始,有了新的Doze。建议,如果您不希望您的应用程序进入待机状态,您应该通过请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限将其“列入白名单”。根据文档,这是专门针对 VoIP 应用程序的。

这两个不同的东西似乎是相关的。我不确定它们是如何相关的,它们是否相互干扰,我是否应该使用其中一个或两个,以及是否有其他考虑。请解释。

另外,我不允许在这个项目上使用推送通知。如果您有其他节省电池的建议,请告诉我。

4

1 回答 1

3

在您的情况下,您似乎应该要求 whitelist,因为您链接的文档表明 GCM 可能与 SIP 协议发生冲突。我会像处理典型的运行时权限一样处理这种情况。如果他们不想禁用与接听电话相关的功能,请在您的应用程序的某个位置(前创建主屏幕时)询问白名单以及您需要它的原因。

您一次应该只使用其中一个,您总是可以通过艰难的方式做到这一点并在没有 sip 的情况下处理 voip 呼叫,然后您可以使用来自服务器的推送通知来处理来电,但我认为除非有人能做到这一点你需要一个顶级产品。

对此没有解决方法,实际上唯一的好方法是自己完成繁重的工作,因为用户使用电池优化器/改进的打瞌睡应用程序很受欢迎,所以无论如何你都可能被杀死。

于 2017-08-16T13:32:06.237 回答