2017-08-07 51 views
4

我正在研究使用SIP协议的IP语音(VoIP)应用程序,该协议要求应用程序监听来电。这意味着应用程序不能睡觉或死亡。Android VoIP应用程序:PARTIAL_WAKE_LOCK vs忽略电池优化(打盹白名单)

对于旧的代码,似乎要做到这一点的方法是获得PARTIAL_WAKE_LOCK

现在来自Android 6.0及更高版本,有新的Doze。建议,如果您不希望自己的应用进入待机状态,则应通过请求REQUEST_IGNORE_BATTERY_OPTIMIZATIONS权限将其“白名单”。这是专门针对根据documentation的VoIP应用。

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

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

回答

2

在你的情况看起来像你应该要求白名单,因为你链接documentation,它建议GCM可以与SIP协议冲突。 我会像典型的运行时权限一样处理这种情况。在你的应用程序的某个地方(如为主机创建主屏幕)询问白名单以及你需要它的原因,如果他们不想仅仅禁用与接收呼叫相关的功能。

你应该一次只使用其中的一个,你总是可以用硬的方式来处理voip呼叫而不用sip,那么你可以使用来自服务器的推送通知来处理来电,但我不认为有人是除非你需要顶级产品。

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

+0

所以,如果我明白你在说什么,我应该使用一个或另一个,但不是两个?但打盹白名单从Android 6.0开始(API等级23)。因此,我应该只对较旧的操作系统版本使用PARTIAL_WAKE_LOCK,并为23级使用Doze白名单? 在这个项目上,我必须使用SIP,我不能使用推送通知。 – Emmanuel

+1

是的,使用PARTIAL_WAVE_LOCK所有版本和API> = 23要求白名单 –

+0

我没有按时按下您的答案,所以赏金刚刚消失。愚蠢的赏金规则不会让我寄给你全额奖金。我不知道他们为什么决定这样做。我希望我现在可以给你全额奖金。 – Emmanuel