我有一個Android應用程序,它具有聊天客戶端作爲其功能之一。聊天客戶端使用基於Android的Smack庫的XMPP,並在後臺運行Openfire作爲XMPP服務器。使用BOSH建立連接整個XMPP連接處理是作爲服務實現的,即使應用程序的活動不在前臺,也可以在後臺運行並偵聽傳入消息。到目前爲止,一切都很好。Android/Smack:讓XMPP連接在睡眠模式下保持活動狀態
唯一的問題似乎是睡眠模式。在模擬器中(當設置爲「保持喚醒」狀態)或使用電話時,XMPP連接處於暫停狀態,應用程序可以發送和接收消息。但是,一旦手機進入睡眠模式,XMPP連接將中斷 - 我可以在Openfire服務器的管理控制檯中看到用戶處於脫機狀態。直觀地說,我想一直接收消息,例如WhatsApp。
當然,我在網上搜索包括Stackoverflow,但我無法得到明確的答案。通常情況下,用例似乎是必須定期執行一項任務,例如每小時執行一次。但是,在聊天客戶端的情況下,這似乎並不起作用。因爲我認爲這是一個常見的情況 - 畢竟,有沒有那麼多的聊天應用或使用聊天功能在那裏 - 這是我的問題:
我如何必須改變/延長應用程序,我可以在手機正在睡覺時收到聊天消息?我發現了
WakeLock
。這是要走的路還是這些不適合我的使用情況?由於棒棒糖,還有
JobScheduler
API本身使用WakeLock
。好點?例如,WhatsApp如何處理這種情況?
在旁註:我有使用模擬器調試睡眠模式的問題。當我在模擬器中關閉「保持喚醒」狀態時,屏幕在1分鐘後變黑並且XMPP連接斷開。但我不知道如何喚醒/切換模擬器,一旦它變黑。 Android Studio實際上告訴我某些時候設備或其他東西已經消失,我必須重新啓動模擬器。
您不需要推送通知,也不是「XMPP連接在指定空閒間隔後斷開連接的自然行爲」。 – Flow