我在我的Android应用中使用aSmack来接收来自我的Desktop-Jabber客户端的消息。这很好,即使我的Android手机处于脱机状态(连接正常关闭后),它也会在下次登录后收到离线消息。
但是当我在手机上进入飞机模式或关闭手机以便突然关闭连接时(不在disconnect()
- 对象上调用Connection
),手机保持“在线”状态我的Desktop-Jabber-client的联系人列表有一段时间了,我可以向它发送消息。但是这些消息永远不会到来即使手机再次登录服务器。这些消息丢失了。
有谁知道如何解决这个问题?在聊天中丢失消息不是一种选择。 :)
编辑:添加了测试代码
BroadcastReceiver:http://pastebin.com/cFLzGXgy
服务:http://pastebin.com/wLpQCQfT
第一个是每次手机连接到网络时启动服务(第二个URL)的BroadcastReceiver。
PS:这只是一个测试代码!如果要使用/测试它,则必须更改服务器/用户名/密码。
答案 0 :(得分:4)
当邮件到达时,您可以尝试将已发送的邮件从客户端b发送到客户端A.问题是如果客户端A处于脱机状态(没有连接中断),则在用户收到消息并且客户端B无法重新发送消息之前,发送的确认不会发送。
答案 1 :(得分:1)
您可以尝试使用Smackx Message Events发送接收邮件的确认 这将确保消息传递,否则您采取纠正措施。
答案 2 :(得分:1)
连接中断时会出现此问题。 您需要“流管理”XEP-198启用连接才能实现此消息。请参阅此博客:http://op-co.de/blog/posts/XEP-0198/基本上它允许节点确认和流恢复,这正是你想要做的事情。所以你应该等到smack将发布4.1。