#android #xmpp #openfire #smack
#Android #xmpp #openfire #smack
Вопрос:
Я создаю приложение для чата для Android с использованием smack open fire. Проблема, с которой я сталкиваюсь, заключается в том, что я знаю, как отправлять и принимать запросы на подписку, но как я могу узнать, получил ли я какой-либо запрос на подписку. Я использовал прослушиватель Stanza, но прослушиватель прослушивает только входящие сообщения чата, а не запросы на подписку. Ниже приведен мой код
StanzaFilter filter=new StanzaTypeFilter(Message.class);
PacketCollector collector=connection.createPacketCollector(filter);
connection.addAsyncStanzaListener(new StanzaListener() {
@Override
public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
Log.wtf("MA","Stanz listner");
}
},filter);
Я новичок в smack, пожалуйста, помогите мне, как я могу прослушать входящий запрос на подписку. Заранее спасибо.
Комментарии:
1. когда вы отправляете запрос на подписку этому пользователю? этот «Список строк» не печатается в журналах?
2. StanzaTypeFilter реализует функцию ‘accept’, что вы вернули в этом?
3. Я просто использую этот модуль для прослушивания входящей подписки.. Я ошибаюсь? Если я ошибаюсь, можете ли вы сказать мне, что я должен написать там вместо фильтра строфы.. Заранее спасибо
4. это должно сработать. просто удалите строку packetCollector, я предполагаю, что вам это не нужно из вашего кода.
Ответ №1:
Запрос на подписку не является Message
. Вместо этого это Presence
.
Итак, вам, вероятно, следует попробовать:
StanzaFilter filter = new StanzaTypeFilter(Presence.class);
Ответ №2:
Вот как я сделал в своем коде Android
StanzaFilter subscribefilter = PresenceTypeFilter.SUBSCRIBE;
PresenceSubscribeListener subscribeListener = new PresenceSubscribeListener(context.getApplicationContext(), connection);
connection.addSyncStanzaListener(subscribeListener, subscribefilter);
И затем на этот объект подключения ссылались в давно запущенной службе в Android. Это было сделано таким образом, что при получении пакета, когда ваше приложение работает в фоновом режиме, вы все равно можете обработать входящий пакет присутствия.
P.S. Я использую smack 4.1.9 в своем коде для Android.