Я разрабатываю приложение для чата для Android, используя asmack. Соединение устанавливается, и я также могу войти в систему. Я добавил прослушиватель пакетов IQ, и он отлично работает. Я также добавил прослушиватель для пакетов Presence, вот мой код:
PacketTypeFilter presenceFilter=new PacketTypeFilter(Presence.class);
connection.addPacketListener(new PacketListener() {
public void processPacket(Packet packet) {
Presence presence = (Presence)packet;
Log.d("test1","Presence packet came :From:"+presence.getFrom()+",Packet ID:"+presence.getPacketID()+",Priority:"+presence.getPriority()+",To:"+presence.getTo()
+",Exn:"+presence.toXML());
if (presence.getType() == Presence.Type.available) {
Log.d("test1","User available");
}
else if (presence.getType() == Presence.Type.unavailable) {
Log.d("test1","User not available");
}
}
}, presenceFilter);
Моя проблема в том, что этот прослушиватель никогда не вызывается для каких-либо входящих пакетов Presence. Это работает для исходящих. Я не могу использовать Roster для управления присутствием, так как наш сервер использует некую службу интеллектуальной маршрутизации для обработки доступности пользователей. Я делаю что-то не так здесь? Любой вклад будет полезен.