我正在将 asmack 用于 Android IM 应用程序,其中我使用带有 AIDL 接口的远程服务。
代替onStartCommand
我的服务方法我编写的代码如下。我创建连接,然后使用它登录。当有人在里面运行我的应用程序时onCreate
我的应用程序的主要活动的方法运行我的服务getApplicationContext.StartService(serviceIntent)
。它工作正常,但几分钟后(有时 10 分钟,有时超过 10 分钟)messageListener
我将其附加在服务站内以接收消息。但我知道连接存在,因为我同时使用xmppConnection
要发送消息,它会向用户 B 发送消息,但不会监听来自用户 B 的消息。我不知道为什么我的监听器不再听到消息。
public int onStartCommand(final Intent intent, final int flags, final int startId) {
ConnectionConfiguration config = new ConnectionConfiguration(URL, MyPort, Host);
xmppConnection = new XMPPConnection(config);
xmppConnection.connect();
xmppConnection.login("[email protected] /cdn-cgi/l/email-protection", "testpass");
xmppConnection.addPacketListener(myMessageListener, new PacketTypeFilter(Message.class));
return START_STICKY;
}
private PacketListener myMessageListener = new PacketListener() {
public void processPacket(Packet packet) {
Message msg = (Message) packet;
}
}
请指导。
您的连接是否在您没有注意到的情况下因错误而关闭?
您应该为每个回调添加连接侦听器和日志以调试连接状态。
在 Android 上,可能有一个“僵尸”套接字:您仍然可以向它写入数据,但接收者永远不会收到消息,当然您也无法从中读取新消息。
网络状态更改后可能会发生这种情况。
检测我使用XMPP平 http://xmpp.org/extensions/xep-0199.html,由客户端从警报发起(每 15 分钟一次,不精确重复)。我禁用空白保持活动状态。
这会破坏客户端和服务器(NAT 或代理)之间存在的大多数超时机制。
另外,如果您没有收到任何 ping 应答(例如在 20 秒内),您可以假设连接状态不佳并手动重新连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)