Android 基于XMPP Smack Openfire 小结怎么解决

Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些操作
我的图书馆
Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些操作
下面就一起来学习一下,如何查询分组和添加分组等!
一、查询所有分组
通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到。
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&获取所有组&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@return&所有组集合&&&&&&*/&&&&&&public&static&List&RosterGroup&&getGroups(Roster&roster)&{&&&&&&&&&&List&RosterGroup&&grouplist&=&new&ArrayList&RosterGroup&();&&&&&&&&&&Collection&RosterGroup&&rosterGroup&=&roster.getGroups();&&&&&&&&&&Iterator&RosterGroup&&i&=&rosterGroup.iterator();&&&&&&&&&&while&(i.hasNext())&{&&&&&&&&&&&&&&grouplist.add(i.next());&&&&&&&&&&}&&&&&&&&&&return&&&&&&&}&&
二、添加分组
也一样通过roster来添加分组,groupName 为分组名。
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&添加一个分组&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@param&groupName&&&&&&*&@return&&&&&&*/&&&&&&public&static&boolean&addGroup(Roster&roster,&String&groupName)&{&&&&&&&&&&try&{&&&&&&&&&&&&&&roster.createGroup(groupName);&&&&&&&&&&&&&&return&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&return&&&&&&&&&&&}&&&&&&}&&
三、查询某个组里面的所有好友
很简单不解释...
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&获取某个组里面的所有好友&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@param&groupName&&&&&&*&&&&&&&&&&&&组名&&&&&&*&@return&&&&&&*/&&&&&&public&static&List&RosterEntry&&getEntriesByGroup(Roster&roster,&&&&&&&&&&&&&&String&groupName)&{&&&&&&&&&&List&RosterEntry&&Entrieslist&=&new&ArrayList&RosterEntry&();&&&&&&&&&&RosterGroup&rosterGroup&=&roster.getGroup(groupName);&&&&&&&&&&Collection&RosterEntry&&rosterEntry&=&rosterGroup.getEntries();&&&&&&&&&&Iterator&RosterEntry&&i&=&rosterEntry.iterator();&&&&&&&&&&while&(i.hasNext())&{&&&&&&&&&&&&&&Entrieslist.add(i.next());&&&&&&&&&&}&&&&&&&&&&return&E&&&&&&}&&
四、查询所有好友信息
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&获取所有好友信息&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@return&&&&&&*/&&&&&&public&static&List&RosterEntry&&getAllEntries(Roster&roster)&{&&&&&&&&&&List&RosterEntry&&Entrieslist&=&new&ArrayList&RosterEntry&();&&&&&&&&&&Collection&RosterEntry&&rosterEntry&=&roster.getEntries();&&&&&&&&&&Iterator&RosterEntry&&i&=&rosterEntry.iterator();&&&&&&&&&&while&(i.hasNext())&{&&&&&&&&&&&&&&Entrieslist.add(i.next());&&&&&&&&&&}&&&&&&&&&&return&E&&&&&&}&&
五、获取用户VCard信息
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&获取用户VCard信息&&&&&&*&&&&&&&*&@param&connection&&&&&&*&@param&user&&&&&&*&@return&&&&&&*&@throws&XMPPException&&&&&&*/&&&&&&public&static&VCard&getUserVCard(XMPPConnection&connection,&String&user)&&&&&&&&&&&&&&throws&XMPPException&{&&&&&&&&&&VCard&vcard&=&new&VCard();&&&&&&&&&&vcard.load(connection,&user);&&&&&&&&&&return&&&&&&&}&&
六、获取用户头像信息
通过Vcard来获取用户头像信息,可以把&InputStream&转换为自己想要的类型,InputStream 转Drawable&
这篇文章里可以找到&&
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&获取用户头像信息&&&&&&*&&&&&&&*&@param&connection&&&&&&*&@param&user&&&&&&*&@return&&&&&&*/&&&&&&public&static&Drawable&getUserImage(XMPPConnection&connection,&String&user)&{&&&&&&&&&&ByteArrayInputStream&bais&=&&&&&&&&&&&try&{&&&&&&&&&&&&&&VCard&vcard&=&new&VCard();&&&&&&&&&&&&&&//&加入这句代码,解决No&VCard&for&&&&&&&&&&&&&&ProviderManager.getInstance().addIQProvider("vCard",&"vcard-temp",&&&&&&&&&&&&&&&&&&&&&&new&org.jivesoftware.smackx.provider.VCardProvider());&&&&&&&&&&&&&&&&vcard.load(connection,&user+"@"+connection.getServiceName());&&&&&&&&&&&&&&&&if&(vcard&==&null&||&vcard.getAvatar()&==&null)&&&&&&&&&&&&&&&&&&return&&&&&&&&&&&&&&&bais&=&new&ByteArrayInputStream(vcard.getAvatar());&&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&}&&&&&&&&&&if&(bais&==&null)&&&&&&&&&&&&&&return&&&&&&&&&&&return&FormatTools.getInstance().InputStream2Drawable(bais);&&&&&&}&&
七、添加好友(有、无分组)
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&添加好友&无分组&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@param&userName&&&&&&*&@param&name&&&&&&*&@return&&&&&&*/&&&&&&public&static&boolean&addUser(Roster&roster,&String&userName,&String&name)&{&&&&&&&&&&try&{&&&&&&&&&&&&&&roster.createEntry(userName,&name,&null);&&&&&&&&&&&&&&return&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&return&&&&&&&&&&&}&&&&&&}&&&&&&&&/**&&&&&&*&添加好友&有分组&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@param&userName&&&&&&*&@param&name&&&&&&*&@param&groupName&&&&&&*&@return&&&&&&*/&&&&&&public&static&boolean&addUser(Roster&roster,&String&userName,&String&name,&&&&&&&&&&&&&&String&groupName)&{&&&&&&&&&&try&{&&&&&&&&&&&&&&roster.createEntry(userName,&name,&new&String[]&{&groupName&});&&&&&&&&&&&&&&return&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&return&&&&&&&&&&&}&&&&&&}&&
八、删除好友
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&删除好友&&&&&&*&&&&&&&*&@param&roster&&&&&&*&@param&userName&&&&&&*&@return&&&&&&*/&&&&&&public&static&boolean&removeUser(Roster&roster,&String&userName)&{&&&&&&&&&&try&{&&&&&&&&&&&&&&if&(userName.contains("@"))&{&&&&&&&&&&&&&&&&&&userName&=&userName.split("@")[0];&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&RosterEntry&entry&=&roster.getEntry(userName);&&&&&&&&&&&&&&System.out.println("删除好友:"&+&userName);&&&&&&&&&&&&&&System.out.println("User."&+&roster.getEntry(userName)&==&null);&&&&&&&&&&&&&&roster.removeEntry(entry);&&&&&&&&&&&&&&&&return&&&&&&&&&&&}&catch&(Exception&e)&{&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&return&&&&&&&&&&&}&&&&&&}&&
九、查询用户&
serverDoMain 为服务器域名
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&查询用户&&&&&&*&&&&&&&*&@param&connection&&&&&&*&@param&serverDomain&&&&&&*&@param&userName&&&&&&*&@return&&&&&&*&@throws&XMPPException&&&&&&*/&&&&&&public&static&List&User&&searchUsers(XMPPConnection&connection,&&&&&&&&&&&&&&String&serverDomain,&String&userName)&throws&XMPPException&{&&&&&&&&&&List&User&&results&=&new&ArrayList&User&();&&&&&&&&&&System.out.println("查询开始..............."&+&connection.getHost()&&&&&&&&&&&&&&&&&&+&connection.getServiceName());&&&&&&&&&&&&UserSearchManager&usm&=&new&UserSearchManager(connection);&&&&&&&&&&&&Form&searchForm&=&usm.getSearchForm(serverDomain);&&&&&&&&&&Form&answerForm&=&searchForm.createAnswerForm();&&&&&&&&&&answerForm.setAnswer("userAccount",&true);&&&&&&&&&&answerForm.setAnswer("userPhote",&userName);&&&&&&&&&&ReportedData&data&=&usm.getSearchResults(answerForm,&serverDomain);&&&&&&&&&&&&Iterator&Row&&it&=&data.getRows();&&&&&&&&&&Row&row&=&&&&&&&&&&&User&user&=&&&&&&&&&&&while&(it.hasNext())&{&&&&&&&&&&&&&&user&=&new&User();&&&&&&&&&&&&&&row&=&it.next();&&&&&&&&&&&&&&user.setUserAccount(row.getValues("userAccount").next().toString());&&&&&&&&&&&&&&user.setUserPhote(row.getValues("userPhote").next().toString());&&&&&&&&&&&&&&&&System.out.println(row.getValues("userAccount").next());&&&&&&&&&&&&&&System.out.println(row.getValues("userPhote").next());&&&&&&&&&&&&&&results.add(user);&&&&&&&&&&&&&&//&若存在,则有返回,UserName一定非空,其他两个若是有设,一定非空&&&&&&&&&&}&&&&&&&&&&return&&&&&&&}&&
十、修改用户头像
[java] &span&style="white-space:pre"&&&&/span&/**&&&&&&*&修改用户头像&&&&&&*&&&&&&&*&@param&connection&&&&&&*&@param&f&&&&&&*&@throws&XMPPException&&&&&&*&@throws&IOException&&&&&&*/&&&&&&public&static&void&changeImage(XMPPConnection&connection,&File&f)&&&&&&&&&&&&&&throws&XMPPException,&IOException&{&&&&&&&&&&&&VCard&vcard&=&new&VCard();&&&&&&&&&&vcard.load(connection);&&&&&&&&&&&&byte[]&&&&&&&&&&&&&bytes&=&getFileBytes(f);&&&&&&&&&&String&encodedImage&=&StringUtils.encodeBase64(bytes);&&&&&&&&&&vcard.setAvatar(bytes,&encodedImage);&&&&&&&&&&vcard.setEncodedImage(encodedImage);&&&&&&&&&&vcard.setField("PHOTO",&"&TYPE&image/jpg&/TYPE&&BINVAL&"&+&encodedImage&&&&&&&&&&&&&&&&&&+&"&/BINVAL&",&true);&&&&&&&&&&&&ByteArrayInputStream&bais&=&new&ByteArrayInputStream(vcard.getAvatar());&&&&&&&&&&FormatTools.getInstance().InputStream2Bitmap(bais);&&&&&&&&&&&&vcard.save(connection);&&&&&&}&&
TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢博客分类:
smack是什么?具体百度一下。我的理解也不深,我理解其实就是XMPP协议的实现。都是浮云,一切都是工具。
首先还是下载smack,我下载的是smack_3_2_0.tar。这个包里有四个jar文件。
首先创建一个java工程。创建一个lib文件夹,把这四个jar包放到lib中,添加到编译路径中。
目录接口如下:
怎么图片还还没传上来。哎。
创建一个TestSmack.java类。具体代码如下:
package org.yangzc.
import org.jivesoftware.smack.ConnectionC
import org.jivesoftware.smack.PacketL
import org.jivesoftware.smack.XMPPC
import org.jivesoftware.smack.XMPPE
import org.jivesoftware.smack.filter.PacketF
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.P
public class TestSmack {
public static void main(String[] args) throws XMPPException {
ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1", 5222);
XMPPConnection connection = new XMPPConnection(config);
XMPPConnection.DEBUG_ENABLED =
connection.connect();
connection.login("admin", "admin");
ChatManager chatManager = connection.getChatManager();
chatManager.addChatListener(new ChatManagerListener(){
public void chatCreated(Chat chat, boolean arg1) {
chat.addMessageListener(new MessageListener(){
public void processMessage(Chat arg0, Message arg1) {
System.out.println(arg1.getBody());
connection.addPacketListener(new PacketListener(){
public void processPacket(Packet arg0) {
System.out.println(arg0);
}, new PacketFilter(){
public boolean accept(Packet arg0) {
IQ iq = new IQ(){
public String getChildElementXML() {
StringBuilder buf = new StringBuilder();
buf.append("&query xmlns=\"com:im:group\"/&");
return buf.toString();
connection.sendPacket(iq);
Chat chat = chatManager.createChat("yangzc", new MessageListener(){
public void processMessage(Chat arg0, Message arg1) {
System.out.println(arg1.getBody());
chat.sendMessage("hello World!!!");
BufferedReader cmdIn = new BufferedReader(new InputStreamReader(System.in));
String cmd = cmdIn.readLine();
if("!q".equalsIgnoreCase(cmd)) {
chat.sendMessage(cmd);
}catch(Exception ex) {
connection.disconnect();
System.exit(0);
测试:启动openfire服务端,添加插件到openfire中。运行这个例子。可以看到,smack和openfire的插件通信成功。
这里比较关键的一句话时是:buf.append("&query xmlns=\"com:im:group\"/&");这句话指定了这个消息是发动到那个命名空间中。
只有发送到openfire插件对应的命名空间中openfire插件才可以正确接收。
当初在这里费了好大的功夫。至此openfire插件和smack的通信实现算是告一段落。剩下的工作就是xml了,不用说了吧,很简单的。
明天写什么呢?应该在研究一下androidpn。简单看了一眼,好像是android领域的服务器推送。推动就那些吧,推推拉拉的。
浏览: 116637 次
来自: 北京
楼主 请问下 “zip压缩包式皮肤” 这个 要怎么解压 怎么读 ...
Exception in thread &main& ...
刚刚接触Jetty收-藏-了
demo在那里呢??
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'> 博客详情
以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后台服务器代码就比较复杂,对于我这新手来讲就比较难了。后来在网上看到用openfire做服务器,利用强大的Smack API库来实现IM聊天就简单多了。
网上也有很多关于这方面的资料,我就在这里把网上的资料和自己的理解总结一下和大家一起交流学习。
需要用到以下几个工具:
最新版本(openfire 3.8.1)
下载地址:
安装配置可参考:
最新版本(Spark 2.6.3)
下载地址:
最新版本 (asmack-jse-buddycloud-.jar)
由于在Android平台下开发 所以我们用到的是 aSmack,与Smack没有很大的区别
下载地址1: (现在用的就是这个,修改了一些BUG)
下载地址2:
需要安装的安装好,需要下载的下载好(这里就不多作介绍)。创建项目工程,导入ASmack jar包,OK,下面就一起去学习怎么实现 用户注册、登录、修改密码和注销等一些功能!
首先第一、与服务器建立好连接
关键代码:127.0.0.1为服务器IP,5222为服务器端口号
[java] view plaincopyprint?
连接服务器
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222);
/* 是否启用安全验证 /
config.setSASLAuthenticationEnabled(false);
/* 是否启用调试 /
// config.setDebuggerEnabled(true);
/* 创建connection链接 /
connection = new XMPPConnection(config);
/* 建立连接 */
connection.connect();
} catch (XMPPException e) {
e.printStackTrace();
连接服务器
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222);
/* 是否启用安全验证 /
config.setSASLAuthenticationEnabled(false);
/* 是否启用调试 /
// config.setDebuggerEnabled(true);
/* 创建connection链接 /
connection = new XMPPConnection(config);
/* 建立连接 */
connection.connect();
} catch (XMPPException e) {
e.printStackTrace();
第二、实现注册
关键代码:
以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。
[java] view plaincopyprint?
@param account 注册帐号
@param password 注册密码
@return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
public String regist(String account, String password) {
if (connection == null)
return &0&;
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(ClientConServer.connection.getServiceName());
reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(password);
reg.addAttribute(&android&, &geolo_createUser_android&);// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter);
ClientConServer.connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
Log.e(&RegistActivity&, &No response from server.&);
return &0&;
} else if (result.getType() == IQ.Type.RESULT) {
return &1&;
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase(&conflict(409)&)) {
Log.e(&RegistActivity&, &IQ.Type.ERROR: &
+ result.getError().toString());
return &2&;
Log.e(&RegistActivity&, &IQ.Type.ERROR: &
+ result.getError().toString());
return &3&;
@param account 注册帐号
@param password 注册密码
@return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
public String regist(String account, String password) {
if (connection == null)
return &0&;
Registration reg = new Registration();
reg.setType(IQ.Type.SET);
reg.setTo(ClientConServer.connection.getServiceName());
reg.setUsername(account);// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(password);
reg.addAttribute(&android&, &geolo_createUser_android&);// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class));
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter);
ClientConServer.connection.sendPacket(reg);
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout());
// Stop queuing results
collector.cancel();// 停止请求results(是否成功的结果)
if (result == null) {
Log.e(&RegistActivity&, &No response from server.&);
return &0&;
} else if (result.getType() == IQ.Type.RESULT) {
return &1&;
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase(&conflict(409)&)) {
Log.e(&RegistActivity&, &IQ.Type.ERROR: &
+ result.getError().toString());
return &2&;
Log.e(&RegistActivity&, &IQ.Type.ERROR: &
+ result.getError().toString());
return &3&;
第三、实现登录
关键代码: 代码很简单不做太多解释
[java] view plaincopyprint?
@param a 登录帐号
@param p 登录密码
public boolean login(String a, String p) {
if (connection == null)
/* 登录 */
connection.login(a, p);
} catch (Exception e) {
e.printStackTrace();
@param a 登录帐号
@param p 登录密码
public boolean login(String a, String p) {
if (connection == null)
/* 登录 */
connection.login(a, p);
} catch (Exception e) {
e.printStackTrace();
第四、修改密码
关键代码:同样很简单
[java] view plaincopyprint?
@param connection
public static boolean changePassword(XMPPConnection connection,String pwd)
connection.getAccountManager().changePassword(pwd);
} catch (Exception e) {
@param connection
public static boolean changePassword(XMPPConnection connection,String pwd)
connection.getAccountManager().changePassword(pwd);
} catch (Exception e) {
第五、更改用户状态
关键代码:好吧,代码有点多,不过很清晰
[java] view plaincopyprint?
更改用户状态
public void setPresence(int code) {
if (connection == null)
switch (code) {
presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
Log.v(&state&, &设置在线&);
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.chat);
connection.sendPacket(presence);
Log.v(&state&, &设置Q我吧&);
System.out.println(presence.toXML());
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.dnd);
connection.sendPacket(presence);
Log.v(&state&, &设置忙碌&);
System.out.println(presence.toXML());
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.away);
connection.sendPacket(presence);
Log.v(&state&, &设置离开&);
System.out.println(presence.toXML());
Roster roster = connection.getRoster();
Collection&RosterEntry& entries = roster.getEntries();
for (RosterEntry entry : entries) {
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_AVAILABLE);
presence.setFrom(connection.getUser());
presence.setTo(entry.getUser());
connection.sendPacket(presence);
System.out.println(presence.toXML());
// 向同一用户的其他客户端发送隐身状态
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_AVAILABLE);
presence.setFrom(connection.getUser());
presence.setTo(StringUtils.parseBareAddress(connection.getUser()));
connection.sendPacket(presence);
Log.v(&state&, &设置隐身&);
presence = new Presence(Presence.Type.unavailable);
connection.sendPacket(presence);
Log.v(&state&, &设置离线&);
更改用户状态
public void setPresence(int code) {
if (connection == null)
switch (code) {
presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
Log.v(&state&, &设置在线&);
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.chat);
connection.sendPacket(presence);
Log.v(&state&, &设置Q我吧&);
System.out.println(presence.toXML());
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.dnd);
connection.sendPacket(presence);
Log.v(&state&, &设置忙碌&);
System.out.println(presence.toXML());
presence = new Presence(Presence.Type.available);
presence.setMode(Presence.Mode.away);
connection.sendPacket(presence);
Log.v(&state&, &设置离开&);
System.out.println(presence.toXML());
Roster roster = connection.getRoster();
Collection&RosterEntry& entries = roster.getEntries();
for (RosterEntry entry : entries) {
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_AVAILABLE);
presence.setFrom(connection.getUser());
presence.setTo(entry.getUser());
connection.sendPacket(presence);
System.out.println(presence.toXML());
// 向同一用户的其他客户端发送隐身状态
presence = new Presence(Presence.Type.unavailable);
presence.setPacketID(Packet.ID_NOT_AVAILABLE);
presence.setFrom(connection.getUser());
presence.setTo(StringUtils.parseBareAddress(connection.getUser()));
connection.sendPacket(presence);
Log.v(&state&, &设置隐身&);
presence = new Presence(Presence.Type.unavailable);
connection.sendPacket(presence);
Log.v(&state&, &设置离线&);
第六:注销
关键代码:很简单吧!
[java] view plaincopyprint?
删除当前用户
@param connection
public static boolean deleteAccount(XMPPConnection connection)
connection.getAccountManager().deleteAccount();
} catch (Exception e) {
删除当前用户
@param connection
public static boolean deleteAccount(XMPPConnection connection)
connection.getAccountManager().deleteAccount();
} catch (Exception e) {
好吧,这篇就先介绍到这!
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥}

我要回帖

更多关于 个人小结 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信