Reputation: 13218
I'm using the Smack library v4.1.0 (not aSmack) for Chat feature within an android app. I can't seem to get the following two feature to work:
For User Presence, I use the following code which always returns null
.
Presence userPresence = roster.getPresence(toUser);
System.out.println("*** User status: " + userPresence.getStatus());
if (userPresence.getMode() == Presence.Mode.available || userPresence.getMode() == Presence.Mode.chat) {
lblIsTyping.setText("Online");
} else {
lblIsTyping.setText("Offline");
}
For Message status, I use the following code:
private class MessageListenerImpl implements MessageListener, ChatStateListener {
@Override
public void processMessage(Chat chat, Message message) {
processMessageCore(message);
}
@Override
public void stateChanged(Chat chat, ChatState chatState) {
System.out.println("*** chat: " + chat.toString());
if (ChatState.composing.equals(chatState)) {
lblIsTyping.setText("typing...");
System.out.println("Chat State: " + chat.getParticipant() + " is typing..");
}
}
@Override
public void processMessage(Message message) {
processMessageCore(message);
}
}
And use it as:
ChatManager.getInstanceFor(HCSmackService.getInstance().getConnection()).createChat(toUser, mThreadID, new MessageListenerImpl());
but the callback doesn't get invoked ever.
How to get these working on Android with the new Smack Library? Has anybody already implemented these features?
Thanks!
Upvotes: 8
Views: 1666
Reputation: 5266
In order to receive user presences you need to send initial presence first. Note, presence packet without type
attribute considered to be "online" presence.
Chat states are generated by your buddy's client application. Typically they not send chat states to "offline" contacts and contacts who are not "in roster".
Upvotes: 3