2017-08-07 77 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