Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.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
如何在多用户聊天/群聊中发送合成/正在键入(聊天状态)事件&;xmpp android中的一对一聊天?_Android_Xmpp_Asmack_Multiuserchat_Groupchat - Fatal编程技术网

如何在多用户聊天/群聊中发送合成/正在键入(聊天状态)事件&;xmpp android中的一对一聊天?

如何在多用户聊天/群聊中发送合成/正在键入(聊天状态)事件&;xmpp android中的一对一聊天?,android,xmpp,asmack,multiuserchat,groupchat,Android,Xmpp,Asmack,Multiuserchat,Groupchat,我想在xmpp的群组(多用户)聊天中发送合成事件,我正在使用asmack库,我已经用一对一聊天完成了相同的功能 我正在使用以下代码: mMessageEventManager = new MessageEventManager(XMPPConnectApplication.getInstance().getXmppConnection()); mMessageEventManager.addMessageEventNotificationListener(new

我想在xmpp的群组(多用户)聊天中发送合成事件,我正在使用asmack库,我已经用一对一聊天完成了相同的功能

我正在使用以下代码:

mMessageEventManager = new MessageEventManager(XMPPConnectApplication.getInstance().getXmppConnection());

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void composingNotification(String from, String to) {
                        Log.e("Receiver-composingNotification",from + " is started typing......"+to);

                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                        Log.e("Receiver-cancelledNotification",from + " is stopped typing......"+to);

                    }
                }); 
如果你有同样的想法,请告诉我


任何帮助都将不胜感激

是的,我已经知道了,而且我在一周前就完成了

我使用了MessageEventManager管理聊天状态

private MessageEventManager mMessageEventManager;
为聊天状态接收侦听器添加此方法:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
使用GroupInfoModel.java创建一个模型类名:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
public类GroupInfoModel实现了可比较的、可序列化的{
私有静态最终长serialVersionUID=1L;
私有字符串memberId=“”,memberName=“”;
私有布尔isAdmin;
公共字符串getMemberId(){
返回成员ID;
}
public void setMemberId(字符串memberId){
this.memberId=memberId;
}
公共字符串getMemberName(){
返回成员名称;
}
public void setMemberName(字符串memberName){
this.memberName=memberName;
}
公共布尔值isAdmin(){
返回isAdmin;
}
公共void setAdmin(布尔值isAdmin){
this.isAdmin=isAdmin;
}
@凌驾
public int compareTo(GroupInfoModel另一个){
返回getMemberName().compareTo(另一个.getMemberName());
}
}
现在学习GroupInfoModel.java类的ArrayList

private ArrayList<GroupInfoModel> groupDetailsList = new ArrayList<GroupInfoModel>();

private boolean isComposingStarted;
private ArrayList groupDetailsList=new ArrayList();
私有布尔值是复合开始的;
活动的/片段的onCreate()上:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
groupDetailsList.clear();
ServiceDiscoveryManager discoManager=ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems=discoManager.DiscoverItems(mRoomId);
for(迭代器it=items.getItems();it.hasNext();){
DiscoverItems.Item项=(DiscoverItems.Item)it.next();
字符串Occompant=item.getEntityID();
居住者=居住者。分割(“/”[1];
GroupInfoModel GroupInfoModel=新的GroupInfoModel();
groupInfoModel.setAdmin(false);
groupInfoModel.setMemberId(占用者+“@”+mServiceNameHere);
groupInfoModel.setMemberName(居住者);
groupDetailsList.add(groupInfoModel);
}
现在在撰写消息的编辑文本聊天视图)屏幕上添加文本观察者

@覆盖
public void onTextChanged(字符序列、int start、int before、int count){
如果(s.toString().length()==1&&!isComposingStarted){
isComposingStarted=真;
if(chatType.equals(“OneToOneChat”)){
mmessageventmanager.sendComposingNotification(myJabberId,friendJabberId);
}else if(chatType.equals(“GroupChat”)){
对于(int i=0;i
强烈建议如果在应用程序中使用上述代码,您可以根据需要修改方法


完成了

是的,我知道了,而且我在一周前就完成了

private MessageEventManager mMessageEventManager;
// send multi user chat typing status
public static void sendMUCTypingStatus(ChatState state)
{
// check if you are connected to group
if(multiUserChat != null)
{
    try{
        // create packet
        Message statusPacket = new Message();
        // set body to null
        statusPacket.setBody(null);
        // set packet type to group chat
        statusPacket.setType(Message.Type.groupchat);
        // set subject to null
        statusPacket.setSubject(null);
        // set to the group name
        statusPacket.setTo(multiUserChat.getRoom());
        // set from my current jis example : me@domain.com
        statusPacket.setFrom(new MyPrefrence(XmppBase.context).getUsername());
        // get the chat state extension and pass our state
        ChatStateExtension extension = new ChatStateExtension(state);
        // add the extention to our packet
        statusPacket.addExtension(extension);
        // get the connection and send the packet
        Utils.getConnection().sendStanza(statusPacket);
    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
    }
}
}

我使用了MessageEventManager管理聊天状态

private MessageEventManager mMessageEventManager;
为聊天状态接收侦听器添加此方法:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
使用GroupInfoModel.java创建一个模型类名:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
public类GroupInfoModel实现了可比较的、可序列化的{
私有静态最终长serialVersionUID=1L;
私有字符串memberId=“”,memberName=“”;
私有布尔isAdmin;
公共字符串getMemberId(){
返回成员ID;
}
public void setMemberId(字符串memberId){
this.memberId=memberId;
}
公共字符串getMemberName(){
返回成员名称;
}
public void setMemberName(字符串memberName){
this.memberName=memberName;
}
公共布尔值isAdmin(){
返回isAdmin;
}
公共void setAdmin(布尔值isAdmin){
this.isAdmin=isAdmin;
}
@凌驾
public int compareTo(GroupInfoModel另一个){
返回getMemberName().compareTo(另一个.getMemberName());
}
}
现在学习GroupInfoModel.java类的ArrayList

private ArrayList<GroupInfoModel> groupDetailsList = new ArrayList<GroupInfoModel>();

private boolean isComposingStarted;
private ArrayList groupDetailsList=new ArrayList();
私有布尔值是复合开始的;
活动的/片段的onCreate()上:

private void chatStateRecognizer(){

        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                mMessageEventManager = new MessageEventManager(mXmppConnection);

                mMessageEventManager.addMessageEventNotificationListener(new MessageEventNotificationListener() {

                    @Override
                    public void offlineNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void displayedNotification(String arg0, String arg1) {

                    }

                    @Override
                    public void deliveredNotification(String from, String arg1) {
                    }

                    @Override
                    public void composingNotification(String from, String to) {
                      Log.i("Receiver:Compose state",from + " is started typing......"+to);
                    }

                    @Override
                    public void cancelledNotification(String from, String to) {
                      Log.i("Receiver:Stop state",from + " is stopped typing......"+to);

                    }
                });
            }
        });

        thread.start();
    }
public class GroupInfoModel implements Comparable<GroupInfoModel>, Serializable{

    private static final long serialVersionUID = 1L;
    private String memberId = "", memberName = "";
    private boolean isAdmin;
    public String getMemberId() {
        return memberId;
    }
    public void setMemberId(String memberId) {
        this.memberId = memberId;
    }
    public String getMemberName() {
        return memberName;
    }
    public void setMemberName(String memberName) {
        this.memberName = memberName;
    }
    public boolean isAdmin() {
        return isAdmin;
    }
    public void setAdmin(boolean isAdmin) {
        this.isAdmin = isAdmin;
    }
    @Override
    public int compareTo(GroupInfoModel another) {
        return getMemberName().compareTo(another.getMemberName());
    }
}
groupDetailsList.clear();
ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems items = discoManager.discoverItems(mRoomId);
    for (Iterator<Item> it = items.getItems(); it.hasNext();) {
        DiscoverItems.Item item = (DiscoverItems.Item) it.next();
        String occupant = item.getEntityID();
        occupant = occupant.split("/")[1];
        GroupInfoModel groupInfoModel = new GroupInfoModel();
        groupInfoModel.setAdmin(false);
        groupInfoModel.setMemberId(occupant+"@"+mServiceNameHere);
        groupInfoModel.setMemberName(occupant);
        groupDetailsList.add(groupInfoModel);
    }
groupDetailsList.clear();
ServiceDiscoveryManager discoManager=ServiceDiscoveryManager.getInstanceFor(mXmppConnection);
DiscoverItems=discoManager.DiscoverItems(mRoomId);
for(迭代器it=items.getItems();it.hasNext();){
DiscoverItems.Item项=(DiscoverItems.Item)it.next();
字符串Occompant=item.getEntityID();
居住者=居住者。分割(“/”[1];
GroupInfoModel GroupInfoModel=新的GroupInfoModel();
groupInfoModel.setAdmin