我有一个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