Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安卓-Smack presence和;是打字吗;功能不工作_Java_Android_Xmpp_Chat_Smack - Fatal编程技术网

Java 安卓-Smack presence和;是打字吗;功能不工作

Java 安卓-Smack presence和;是打字吗;功能不工作,java,android,xmpp,chat,smack,Java,Android,Xmpp,Chat,Smack,我正在android应用程序中使用Smack library v4.1.0(而不是aSmack)的聊天功能。我似乎无法使用以下两个功能: 用户状态(在线,最后一次看到) 聊天信息状态(已发送、已传递、已读取) 对于用户状态,我使用以下代码,它总是返回null Presence userPresence = roster.getPresence(toUser); System.out.println("*** User status: " + userPresence.getStatus());

我正在android应用程序中使用Smack library v4.1.0(而不是aSmack)的聊天功能。我似乎无法使用以下两个功能:

  • 用户状态(在线,最后一次看到)
  • 聊天信息状态(已发送、已传递、已读取)
  • 对于用户状态,我使用以下代码,它总是返回
    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");
    }
    
    对于消息状态,我使用以下代码:

    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);
        }
    }
    
    并将其用作:

    ChatManager.getInstanceFor(HCSmackService.getInstance().getConnection()).createChat(toUser,mThreadID,newMessageListenerImpl())

    但是回调永远不会被调用

    如何使用新的Smack库在Android上实现这些功能?有人已经实现了这些功能吗

    谢谢

  • 为了接收用户状态,您需要首先发送。注意,不带
    类型
    属性的状态数据包被视为“在线”状态

  • 由好友的客户端应用程序生成。通常,他们不会将聊天状态发送给“脱机”联系人和不在“名册”中的联系人


  • 当用户尝试使用与接收器工作相同的连接联机和脱机时,您可以获得联机或脱机状态,但您必须保持从编码端最后看到的状态。