Android 使用Smack+openfire开发基于XMPP协议的聊天

本文介绍了如何在Android中使用Smack 4.1.6与OpenFire 4.0.1搭建基于XMPP协议的聊天应用。详细讲解了登录、添加好友、监听好友请求、分组管理、获取离线消息、发送群消息、发送文件等关键步骤,并提供了相应的代码示例。同时提到了监听群聊邀请的方法。
摘要由CSDN通过智能技术生成

本文:openfire:4.0.1,Smack:4.1.6

OpenFire与Smack下载:http://www.igniterealtime.org/index.jsp

SmackAPI:http://www.igniterealtime.org/projects/index.jsp

Smack开发指南:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/

Smack源码(GitHub地址):https://github.com/igniterealtime/Smack

Smack开发指南写的很简单只描述了一些基本功能,本文记录我在开发过程中遇到的开发指南上没有的问题。

XMPP官网:http://www.xmpp.org/

Android怎么导入Smack的jar包(请参考Android部分):https://github.com/igniterealtime/Smack/wiki/Smack-4.1-Readme-and-Upgrade-Guide

这里有一个老外回答的怎么在Android上使用Smack:http://stackoverflow.com/questions/26965506/how-to-use-smack-4-1-in-android

两个对学习XMPP有帮助的博客:

1、http://blog.csdn.net/lnb333666/article/list/1

2、http://blog.csdn.net/h7870181?viewmode=contents

这两个博主都是基于ASmack开发的,我是基于Smack开发的不过有很多代码通用,很有借鉴意义。


1、登录后立马获取Roster一般是获取不到的,你可以这么做:

mRoster.addRosterLoadedListener(new RosterLoadedListener() {
                                    
                                    @Override
                                    public void onRosterLoaded(Roster arg0) {
                                        getAllRoster();
                                    }
                                });

监听所有Roster加载完成后进行获取。


2、添加好友:

private void addUser(String userId){
        if(userId.indexOf("@你服务器的域名或IP")==-1){
            userId=userId+"@你服务器的域名或IP";
        }
        
        mRoster.addRosterListener(new RosterListener(){

            @Override
            public void entriesAdded(Collection<String> arg0) {
            }

            @Override
            public void entriesDeleted(Collection<String> arg0) {
            }

            @Override
            public void entriesUpdated(Collection<String> arg0) {
            }

            @Override
            public void presenceChanged(Presence arg0) {
            }
            
        });
        try {
            mRoster.createEntry(userId, userId, new String[]{"好友分组名"});
        } catch (NotLoggedInException e) {
            e.printStackTrace();
        } catch (NoResponseException e) {
            e.printStackTrace();
        } catch (XMPPErrorException e) {
            e.printStackTrace();
        } catch (NotConnectedException e) {
            e.printStackTrace();
        }
    }


3、监听别人对你添加好友(也可以监听别人是否响应你的添加请求,在4.1.6PacketListener和PacketTypeFilter提示以过期):
public void addSubscriptionListener() {
    PacketTypeFilter packetFilter = new PacketTypeFilter(Presence.class);      
         PacketListener subscribeListener = new PacketListener(){      

            @Override
            public void processPacket(Stanza stanza) throws NotConnectedException {
                Looper.prepare();
                final Presence presence = (Presence)stanza;     
                if (presence.getType().equals(Presence.Type.subscribe)) {      
                       Toast.makeText(MainActivity.this, stanza.getFrom()+"请求添加你为好友",
                               Toast.LENGTH_SHORT).show();
                } else if (presence.getType().equals(Presence.Type.unsubscribe)) {      
                    Toast.makeText(MainActivity.this, stanza.getFrom()+"删除了你",
                            Toast.LENGTH_SHORT).show();
                }
                Looper.loop();
            }      
                   
         };      
         mXMPPTCPConnection.addPacketListener(subscribeListener, packetFilter);      
    }

4、添加好友分组:

public static boolean addGroup(Roster roster, String groupName) {
        try {
            roster.createGroup(groupName)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值