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

Posted

技术标签:

【中文标题】Android VoIP 应用程序:PARTIAL_WAKE_LOCK 与忽略电池优化(打瞌睡白名单)【英文标题】:Android VoIP application: PARTIAL_WAKE_LOCK vs ignoring Battery Optimizations (doze whitelisting) 【发布时间】:2018-01-14 05:18:01 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

所以如果我明白你在说什么,我应该使用其中一个而不是两个?但是 Doze 白名单从 Android 6.0(API 级别 23)开始。所以我应该只对较旧的操作系统版本使用 PARTIAL_WAKE_LOCK,而对 23 级使用打盹白名单?在这个项目中,我必须使用 SIP,但不能使用推送通知。 是的,所有版本都使用 PARTIAL_WAVE_LOCK 并且 API >= 23 请求白名单 我没有按时点击你的答案,所以赏金就消失了。愚蠢的赏金规则不会让我把全部赏金寄给你。我不知道他们为什么决定这样做。我希望我现在可以将全部赏金发送给您。 别担心@Emmanuel 我的回答不是很好,只是建议我如何处理android的功能> = M

以上是关于Android VoIP 应用程序:PARTIAL_WAKE_LOCK 与忽略电池优化(打瞌睡白名单)的主要内容,如果未能解决你的问题,请参考以下文章

为我的 Android VoIP 应用程序部署哪个 SIP 服务器?

有没有办法让 Android 原生 sip 堆栈支持所有 android 设备上的 voip?

如何在android手机上合并两个gsm和voip通话

VOIP SipDemo 注册失败(错误)

如何通过使用 jingle 和 webrtc 来安装 Android voip?

android的 frameworks文件夹在哪?像frameworks/base/voip/jni/rtp在哪?