Android VoIP 应用程序:PARTIAL_WAKE_LOCK 对比忽略电池优化(打瞌睡白名单)

Android VoIP application: PARTIAL_WAKE_LOCK vs ignoring Battery Optimizations (doze whitelisting)

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

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

现在从 Android 6.0 及更高版本开始,有新的 Doze. It is recommended that, if you don't want your app to go to standby, you should "whitelist" it by requesting the REQUEST_IGNORE_BATTERY_OPTIMIZATIONS permission. This is specifically for VoIP applications according to the documentation

这两个不同的事情似乎是相关的。我不确定它们之间的关系,它们是否相互干扰,我是否应该使用一个或另一个或两者,如果有其他考虑。请解释。

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

在您的情况下,您应该要求白名单,因为您链接的 documentation,它建议 GCM 可能与 SIP 协议冲突。 我会像典型的运行时权限一样处理这种情况。在你的应用程序的某个地方(例如你的主屏幕的创建时)要求白名单和你需要它的原因,如果他们不想只禁用与接听电话相关的功能。

你应该一次只使用其中一个,你总是可以用困难的方式来处理没有 sip 的 voip 呼叫,然后你可以处理来自你的服务器的推送通知的来电,但我不认为有人除非您需要顶级产品,否则就可以了。

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