Je développe une application de discussion à l'aide de OpenFire XMPP Server. Je peux envoyer une discussion en texte entre deux utilisateurs. Mais je veux connaître le statut de frappe lorsque quelqu'un saisit un message. J'ai donc créé une classe: - mais je suis confondre de sorte que ça va marcher? Je sais que j'ai besoin d'un paquet où je peux, dans l'auditeur. Mais je suis incapable de trouver ce paquet. P> S'il vous plaît n'importe quel suggère, comment fonctionnera-t-il? P> Et aussi quelle est la différence entre Smack et ASMACK? P> Merci! P> p>
8 Réponses :
Pour activer alors vous créez puis transmettez-le dans la méthode Créer une chat p> Quelle est la différence entre Smack et Asmack ? strong> <- <- chatStatelistener code> Vous devez créer une classe
Messagelistener CODE> Classe
Messagelistener code> objet p>
Merci Sunil. A l'air bien et m'a donné une solution. Je vérifierai.
Aucun utilisateurIide n'est le Jid de l'autre participant, pas celui qui s'est connecté
merci Sunil. Si vous avez un peu de temps. S'il vous plaît vérifier également Stackoverflow.com/questions/18437329/...
Pour gérer les événements de message, regardez ce Igniteraltime.org/builds / Smack / Docs / Dernières documentaires / ...
J'ai vérifié mais je n'ai pas été statéChaged. plz suggérer
S'il vous plaît vérifier, cela ne fonctionne pas, je suis toujours incapable d'obtenir le statut de taper.
Envoyez-vous l'état de composition de l'autre extrémité?
Sry, j'utilise juste ce code. Je pense que je devrais utiliser FocAronedittText et lorsque l'utilisateur tapera l'utilisateur, il enverra un statut composant. Avez-vous un exemple?
Laissez-nous Continuer cette discussion en chat
@Sunilmishra Obtenir une erreur sur chat Newchat = chatmanager.createchat (jabber_id_of_friend, messagelistener) ;. Pouvez-vous expliquer cette ligne? Il affiche la ligne rouge avec erreur ne peut pas faire référence statique à la méthode non statique Createchat (String, Messagelistener) à partir du type Chatmanager Code>
@get Createchat n'est pas une méthode statique, vous avez besoin d'une instance de ChatManager pour invoquer cette méthode
Cela n'a pas fonctionné sur Openfire. Notification de type BESOIN XEP-0085: notifications d'état de discussion, mais la dose OpenFire ne possède pas ce XEP. Toute autre suggestion sauf changer Openfire?
Sa ne fonctionne aucune autre solution pour obtenir l'état de l'utilisateur.
Enfin j'ai eu la solution. J'ai besoin d'utiliser un auditeur de discussion avec le gestionnaire de discussion et je dois également utiliser dans la fonction Construit et devez également envoyer une notification comme celle-ci .. p> où Mem est le type de messageEventManger.
Ref: http: //www.igniteraltime .org / Builds / Smack / Docs / Derniers / Javadoc / Org / JiveSoftware / Smackx / MessageEventManager.html P> P>
salut j'ai essayé au-dessus ..mais ne fonctionne pas! Voici mon code! Toute aide sera appréciée ... Message msg1 = nouveau message (à, message.type.chat); msg1.setfrom ("user1@192.168.0.98"); // mon identifiant MessageEventManager Event = New MessageEventManager (connexion); // ID de destinataire Event.SendCosingNotification ("Tech1@192.168.0.98", msg1.ge TPacketide ());
@Aserez, vous devez traiter le message reçu dans le ProcessMessage () code>, car il reçoit tous les paquets entrants, non seulement le statut
typing code>. Il peut être fait une pause, des paquets d'état hors ligne / en ligne, ou des messages .. Alors essayez de le traiter, puis de le gérer ..
Salut. J'ai essayé de la même chose, mais cela n'a pas fonctionné pour moi..Ce ni envoi de notification de composition ne la recevait pas. me donne NULL à la réception et pendant le reçu de iOS. Aidez-moi à découvrir cela. Merci.
FYI: fusionné de
Votre ou un autre client XMPP que vous utilisez, devriez envoyer un état de discussion pour que vous puissiez attraper l'état. comme ceci; p> ou p> < Pré> xxx pré> p>
Peut-être que votre application de serveur ne le supporte pas.
Vous voulez dire que notre serveur n'est pas configurant pour cela? Mais c'est bien fonctionnant avec iOS à iOS. J'écris cette ligne sur TextChangelistner d'Editext. et l'objet de chat est Chatmanager = Connection.getchatManager (); Chat chat = chatmanager.createchat ("utilisateur @", liste); Même lorsque je reçois le statut de composition de iOS ProcessMessage me donne NULL. S'il vous plaît aidez-moi à trouver une solution pour envoyer et recevoir. P.s. J'utilise la bibliothèque d'Asmack
FYI: fusionné de Stackoverflow.com/Questtions/22225394/...
Ceci doit être fait sur l'écouteur de changement de texte EDITEXT ...right?
votes
ChatManager chatManager = ChatManager.getInstanceFor(connection); Chat chat= chatManager.createChat(to, new ChatStateListener() { @Override public void stateChanged(Chat chat, ChatState state) { switch (state){ case active: Log.d("state","active"); break; case composing: Log.d("state","composing"); break; case paused: Log.d("state","paused"); break; case inactive: Log.d("state","inactive"); break; case gone: Log.d("state","gone"); break; } } @Override public void processMessage(Chat chat, Message message) { Log.d("processMessage","processMessage"); } }); use this code.hope so will work
Bonjour, Ameanali Momin, pouvez-vous s'il vous plaît laissez-moi savoir scénario exact à votre fin. et quel type d'erreur vous êtes confronté au XMPP. Pour plus d'informations Message M sur Skype @ Piyush.gupta326. Ensuite, nous pouvons en discuter davantage, votre problème et j'espère atteindre le point de réussite.
Je ne reçois aucune erreur, mais quand je démarre, le code Tyoping n'entre pas dans aucun état, je veux dire StatChanGangelistener non appelé.
Hey Man, avez-vous lu cette doc xmpp.org/extensions/xep-0085.htmlle_/a >
C'est une théorie complètement et non intéressante dès maintenant, car la plupart des choses sont assez claires en utilisant le client de discussion.
Je voulais dire, veuillez lire la documentation dans ce lien. J'espère que vous trouverez la solution là-bas. sinon, nous pouvons discuter de la même chose ici.
Dois-je devoir ajouter quelque chose en envoyant un message?
Laissez-nous Continuer cette discussion dans chat .
C'était mon erreur que je n'envoie pas l'état de composition lorsque l'utilisateur commence à taper et à envoyer un autre statut lors de l'arrêt de la frappe. Mais ChatState Auditeur que vous avez mentionné est perfacte.
J'utilise l'auditeur de l'état de discussion:
public class ChatStateChangedListener implements ChatStateListener { public ChatStateChangedListener() { printLog("Chat State Changed Listner Constructor"); } @Override public void processMessage(Chat arg0, Message arg1) { } @Override public void stateChanged(Chat chat, ChatState state) { if (state.toString().equals(ChatState.composing.toString())) { tvLastSeen.setText("Typing..."); } else if (state.toString().equals(ChatState.paused.toString())) { tvLastSeen.setText("paused..."); } else { tvLastSeen.setText("nothing"); } } } }
FYI: fusionné de
Créer sur la classe MMessagelistener Pour écouter les messages entrants forts> Classe privée MMESSAGELISTENER implémente Messagelistener, ChatStatelistener { P>
Bonjour Dhamesh, j'ai fait la même chose, mais je reçois toujours NULL en composant un message d'état dans le processus de processage. My EditText Text Modification Méthode est: Newchat = Chatmanager.Createchat (Send_To, Messagelistener); Message msg = nouveau message (send_to, message.type.chat); msg.setfrom (USERNAME_LOGIN + "@" + NOME); // mon identifiant newchat.sendMessage (msg); ChatStatemanager.getinstance (connexion) .SetCurrentState (chat tstate.cosing, newchat); Et cela ne pas envoyer de statut aux autres.
FYI: fusionné de
Comment vérifier si l'utilisateur a fait une pause ou ne tape plus dans l'editext?
votes
public MMessageListener(Context contxt) {
}
@Override
public void stateChanged(Chat chat, ChatState chatState) {
mStatus = "Online";
if (ChatState.composing.equals(chatState)) {
mStatus = chat.getParticipant() + " is typing..";
Log.d("Chat State", chat.getParticipant() + " is typing..");
} else if (ChatState.gone.equals(chatState)) {
Log.d("Chat State", chat.getParticipant() + " has left the conversation.");
mStatus = chat.getParticipant() + " has left the conversation.";
} else if (ChatState.paused.equals(chatState)){
Log.d("Chat State", chat.getParticipant() + ": " + chatState.name());
mStatus = "Paused";
}else if (ChatState.active.equals(chatState)){
mStatus = "Online";
}
// do whatever you want to do once you receive status
}
@Override
public void processMessage(Message message) {
}
@Override
public void processMessage(Chat chat, Message message) {
}
}
Cependant, vous pouvez également l'obtenir de processpacket. Là, vous obtiendrez un objet de message, après que vous puissiez extraire une partie XML à partir de là et les gérer sa contiennent de la discussion spécifique ou non.
Message message = (Message) packet; String msg_xml = message.toXML().toString(); if (msg_xml.contains(ChatState.composing.toString())) { //handle is-typing, probably some indication on screen } else if (msg_xml.contains(ChatState.paused.toString())) { // handle "stopped typing" } else { // normal msg }
Il suffit d'ajouter ChatStatemanager CODE> après
ChatManager CODE> INTALISATION:
chatManager.createChat(message.getTo(), chatMessageListener).sendMessage(message);
private ChatStateListener chatMessageListener = new ChatStateListener() {
@Override
public void stateChanged(Chat chat, ChatState state) {
//State Change composing,active,paused,gone,etc
Log.d(TAG, "ChatStateListener:::stateChanged -> " + chat.toString() + " \n -> " + state.toString());
}
@Override
public void processMessage(Chat chat, Message message) {
//Incoming Message
Log.d(TAG, "ChatStateListener:::processMessage -> " + chat.toString() + " \n -> " + message.toString());
}
};
FYI: fusionné de Stackoverflow.com/Questtions/22225394/...
La prochaine fois, il suffit probablement de répondre à une question et de pavillon le reste pour nous faire savoir qu'ils sont des duplicats; Publier la même réponse 7 fois est assez excessif.
Veuillez vérifier cette question à Stackoverflow: Stackoverflow.com/Questtions/21154833/...