`

Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些操作

    博客分类:
  • java
 
阅读更多

一、查询所有分组

通过Roster来获取所有分组,Roster可以通过connection.getRoster()来得到。

 

/**
 * 获取所有组
 * 
 * @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 grouplist;
}

 

二、添加分组

 

也一样通过roster来添加分组,groupName 为分组名。

 

/**
 * 添加一个分组
 * 
 * @param roster
 * @param groupName
 * @return
 */
public static boolean addGroup(Roster roster, String groupName) {
try {
roster.createGroup(groupName);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

 

三、查询某个组里面的所有好友

很简单不解释...

 

/**
 * 获取某个组里面的所有好友
 * 
 * @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 Entrieslist;
}

 

四、查询所有好友信息

 

很简单

 

/**
 * 获取所有好友信息
 * 
 * @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 Entrieslist;
}

 

五、获取用户VCard信息

 

 

/**
 * 获取用户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;
}

 

六、获取用户头像信息

 

通过Vcard来获取用户头像信息,可以把 InputStream 转换为自己想要的类型,InputStream 转Drawable 

这篇文章里可以找到   http://blog.csdn.net/h7870181/article/details/8663760

 

/**
 * 获取用户头像信息
 * 
 * @param connection
 * @param user
 * @return
 */
public static Drawable getUserImage(XMPPConnection connection, String user) {
ByteArrayInputStream bais = null;
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 null;
bais = new ByteArrayInputStream(vcard.getAvatar());

} catch (Exception e) {
e.printStackTrace();
}
if (bais == null)
return null;
return FormatTools.getInstance().InputStream2Drawable(bais);
}

 

七、添加好友(有、无分组)

 

 

/**
 * 添加好友 无分组
 * 
 * @param roster
 * @param userName
 * @param name
 * @return
 */
public static boolean addUser(Roster roster, String userName, String name) {
try {
roster.createEntry(userName, name, null);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
 * 添加好友 有分组
 * 
 * @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 true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

 

八、删除好友

 

 

/**
 * 删除好友
 * 
 * @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 true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

 

九、查询用户 

 

serverDoMain 为服务器名

 

/**
 * 查询用户
 * 
 * @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 = null;
User user = null;
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 results;
}

 

十、修改用户头像

 

 

/**
 * 修改用户头像
 * 
 * @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;

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);
}

 

分享到:
评论

相关推荐

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.zip

    综上所述,这个项目涉及到的技术栈包括XMPP协议、Smack库的使用、Openfire服务器的部署和配置,以及Android应用开发中的UI设计、安全性和性能优化。通过这些技术的结合,可以构建出一个功能完善的即时通讯应用,为...

    Android-XMPP-openfire-实现IM

    在Android平台上实现即时通讯(Instant Messaging,简称IM)系统,XMPP(Extensible Messaging and Presence Protocol)是一种常用的标准协议,而Openfire是一款基于XMPP的开源服务器软件。本项目"Android-XMPP-...

    XMPP_OPenfire即时通讯IM-android版

    总之,"XMPP_OPenfire即时通讯IM-android版"项目涵盖了XMPP协议和Openfire服务器的集成,以及Android应用中的即时通讯功能实现,涉及到网络通信、数据传输、用户交互等多个方面的技术。通过熟练掌握这些知识点,...

    基于openfire 的android IM 即时通讯smack的android IM

    本教程将聚焦于如何利用Openfire服务器和Smack库构建一个基于Android的IM应用。 Openfire是一款开源的、基于XMPP协议的实时通讯服务器。XMPP(Extensible Messaging and Presence Protocol)是一种标准通信协议,...

    Android XMPP 即时通讯 Openfire二次开发资料,非常齐

    Android XMPP 即时通讯 Openfire 二次开发是基于 XMPP 协议的即时通讯解决方案,使用 Openfire 作为服务器端,Spark 作为客户端,Smack 作为 XMPP 传输协议的实现。XMPP 协议是一个基于 XML 的消息传递协议,...

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现。实现了注册,登录,读取好友列表,搜索好友,添加分组,添加好友,删除好友,修改心情,两个客户端之间的信息发送与接收,监听发送来的好友...

    Android代码-基于openfire和smack的安卓xmpp客户端

    【Android代码-基于openfire和smack的安卓xmpp客户端】是一个项目,它实现了使用XMPP协议在Android设备上创建一个客户端应用。XMPP(Extensible Messaging and Presence Protocol)是一种实时通信协议,常用于实现...

    android XMPP openfire

    Android XMPP(Extensible Messaging and Presence Protocol)是用于在Android平台上实现即时通讯(IM)的一种技术,它基于开放源码的XMPP协议栈。Openfire是XMPP服务器的一个实现,用Java编写,提供了实时、双向的...

    android使用smack,openfire通信

    Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfire。

    Android使用XMPP协议、OpenFire服务器和Smack类库实现即时通信

    OpenFire是一款免费、开源的XMPP服务器,它支持多种操作系统,并且提供丰富的API供开发者进行二次开发。安装和配置OpenFire相对简单,开发者可以通过Web界面进行管理,包括创建用户、设置群组等。 接着,我们引入...

    IM(Spark+Smack+Openfire)开发资料详细说明文档

    本文档详细介绍了基于Spark、Smack和Openfire构建IM系统的开发过程和关键知识点,旨在帮助开发者更好地理解和实践。 1. **Spark**: Spark是一款开源的Web即时通讯客户端,支持多种平台,包括Windows、Linux和Mac ...

    openfire+smack开发webim笔记

    【标题】:“openfire+smack开发webim笔记”涉及的知识点详解 【一】XMPP(可扩展消息处理现场协议) XMPP是一种基于XML的即时通讯协议,它最初源于Jabber项目,用于实现服务器之间的即时消息传递和在线状态探测。...

    基于openfire为服务器的xmpp即时通信 Android客户端

    综上所述,基于openfire的XMPP即时通信Android客户端开发涉及到服务器配置、协议理解、Android编程等多个技术领域,开发者需要具备扎实的技术基础和实践经验,才能成功构建一个高效、稳定的即时通讯系统。

    基于Smack3.0.4+ Openfire3.10.2开发之Android 客户端之三

    总之,基于Smack 3.0.4和Openfire 3.10.2的Android客户端开发涉及用户认证、服务器交互等多个环节,开发者需要熟练掌握这两个工具的用法,并了解XMPP协议的相关知识,才能构建出高效稳定的即时通讯应用。

    Android IM之基于Openfire+Smack的聊天服务器的搭建与测试

    总结来说,通过Openfire和Smack,我们可以轻松地搭建一个基础的Android IM应用,实现用户登录、聊天、文件传输等功能。不过,实际项目中还需要考虑性能优化、用户体验、错误处理等多方面因素,以打造一个稳定、高效...

    Android+smack4.1.4+openfire demo

    通过这个“Android+smack4.1.4+openfire demo”,开发者可以学习如何在Android应用中实现实时通信功能,包括连接Openfire服务器、登录、获取好友列表以及发送和接收消息。这个示例代码可以作为Android即时通讯应用...

    android openfire xmpp smack即时通讯,包括:聊天发生文字,表情,图片,语音等.zip

    在IT行业中,即时通讯...综上所述,这个项目涉及了Android应用开发、Java编程、即时通讯协议理解、服务器管理以及安全与性能优化等多个技术领域,对于想要深入学习即时通讯系统的开发者来说,是一个很好的实践案例。

    OpenFire+smack3.0.4 即时通讯Demo

    首先,OpenFire是一款用Java编写的开源XMPP服务器,它基于XMPP(Extensible Messaging and Presence Protocol)协议,这个协议被广泛用于即时通讯系统,提供实时通讯和在线状态等功能。OpenFire的特点包括高效、可...

    openfire + spark 开发

    在本文中,我们将讨论基于 Openfire 和 Spark 的 XMPP IM 软件开发。我们将从 XMPP 协议的介绍开始,接着讨论如何使用 Spark 和 Openfire 来实现一个完整的 IM 软件开发。 什么是 XMPP? XMPP(Extensible ...

    openfire+spark+smack开发流程.pdf

    在本文中,我们将详细介绍OpenFire、Spark和Smack三个组件在XMPP IM开发中的作用,以及如何使用它们来开发一个完整的XMPP IM系统。 首先,让我们了解一下XMPP是什么?Extensible Messaging and Presence Protocol,...

Global site tag (gtag.js) - Google Analytics