XMPP——Smack[4]状态,心情,头像更改
呵呵,三天时间,看的不是很深入,欢迎大家补充呀
- 修改自身状态
包括上线,隐身,对某人隐身,对某人上线
- public static void updateStateToAvailable(XMPPConnection connection)
- {
- Presence presence = new Presence(Presence.Type.available);
- connection.sendPacket(presence);
- }
- public static void updateStateToUnAvailable(XMPPConnection connection)
- {
- Presence presence = new Presence(Presence.Type.unavailable);
- connection.sendPacket(presence);
- }
- public static void updateStateToUnAvailableToSomeone(XMPPConnection connection,String userName)
- {
- Presence presence = new Presence(Presence.Type.unavailable);
- presence.setTo(userName);
- connection.sendPacket(presence);
- }
- public static void updateStateToAvailableToSomeone(XMPPConnection connection,String userName)
- {
- Presence presence = new Presence(Presence.Type.available);
- presence.setTo(userName);
- connection.sendPacket(presence);
- }
- 心情修改
- /**
- * 修改心情
- * @param connection
- * @param status
- */
- public static void changeStateMessage(XMPPConnection connection,String status)
- {
- Presence presence = new Presence(Presence.Type.available);
- presence.setStatus(status);
- connection.sendPacket(presence);
- }
- 修改用户头像
有点麻烦,主要是读入图片文件,编码,传输之
- 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());
- Image image = ImageIO.read(bais);
- ImageIcon ic = new ImageIcon(image);
- vcard.save(connection);
- }
- private static byte[] getFileBytes(File file) throws IOException {
- BufferedInputStream bis = null;
- try {
- bis = new BufferedInputStream(new FileInputStream(file));
- int bytes = (int) file.length();
- byte[] buffer = new byte[bytes];
- int readBytes = bis.read(buffer);
- if (readBytes != buffer.length) {
- throw new IOException("Entire file not read");
- }
- return buffer;
- } finally {
- if (bis != null) {
- bis.close();
- }
- }
- }
- 补充,用户状态的监听
即对方改变头像,状态,心情时,更新自己用户列表,其实这里已经有smack实现的监听器
- final Roster roster = Client.getRoster();
- roster.addRosterListener(
- new RosterListener() {
- @Override
- public void entriesAdded(Collection<String> arg0) {
- // TODO Auto-generated method stub
- System.out.println("--------EE:"+"entriesAdded");
- }
- @Override
- public void entriesDeleted(Collection<String> arg0) {
- // TODO Auto-generated method stub
- System.out.println("--------EE:"+"entriesDeleted");
- }
- @Override
- public void entriesUpdated(Collection<String> arg0) {
- // TODO Auto-generated method stub
- System.out.println("--------EE:"+"entriesUpdated");
- }
- @Override
- public void presenceChanged(Presence arg0) {
- // TODO Auto-generated method stub
- System.out.println("--------EE:"+"presenceChanged");
- }
- });
XMPP——Smack[4]状态,心情,头像更改的更多相关文章
- Openfire XMPP Smack RTC IM 即时通讯 聊天 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Android基于XMPP Smack openfire 开发的聊天室
Android基于XMPP Smack openfire 开发的聊天室(一)[会议服务.聊天室列表.加入] http://blog.csdn.net/lnb333666/article/details ...
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
不管学习什么都应该总结 这里我把关于Xmpp的一些方法整理到一个工具类中了 我就分享给大家 XmppConnection.java package com.techrare.utils; import ...
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等
http://blog.csdn.net/h7870181/article/details/8653865 以前学习过用Scoket 建立聊天,简单的建立聊天是没问题的,但如果要实现多人复杂的聊天,后 ...
- XMPP——Smack[6]离线消息和离线文件的实现
终篇,三天所学所用,也就这些,如果需要大家要自己去查资料研究研究,功能其实可以很强大的 可惜界面做得不好,一大短处,从大一迄今没整好,主要是个人审美不行,哎 毕业季呀毕业季,明天摆摊卖书,再半月就可能 ...
- XMPP——Smack[1]连接、登陆及账户操作
临毕业前,应需求,花了三天写了个小的聊天工具,貌似简陋得很….若有机会再完善吧,目前毕业季,处理毕业事宜,还要准备即将的入职. 眼瞅着大学四年就这么结束了,哎. 开始吧,四篇博文简单介绍下基本实现,由 ...
- Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
学习过程中大家都碰到过连接被断开的问题给困扰吧,下面教大家如何做到连接断开后,重新连接 首先要创建连接监听器,用来监听连接状态,这里我写了一个类 继承了ConnectionListener,重写了里面 ...
- 如何高效撤销Git管理的文件在各种状态下的更改
一.背景 企业中我们一般采用分布式版本管理工具git来进行版本管理,在团队协作的过程中,我们难免会遇到误操作,需要撤销更改的情况,那么我们怎么高效的进行撤销修改呢?对于还未提交到暂存区的代码怎么高效撤 ...
- Android基于XMPP Smack及Openfire学习笔记(1)
之前开发的项目中实用到IM聊天功能.可是这块功能公司有专门的IM团队来开发,由他们开发好后.直接接入到我们APP中.我參与写IM相关功能非常地少,所以也一直想学习相关知识 . 眼下Android主要用 ...
随机推荐
- 函数(Functions)
概念: 下面是蛮经典的解释: What Good are Functions? You might have considered the situation where you would li ...
- C++ RAII手法实例,不使用智能指针
/* * ===================================================================================== * * Filen ...
- C#中种常用的计时器
1.System.Timers.Timer和System.Windows.Forms.Timer,它的最低识别为1/18s. 2.timeGetTime,他的最低识别能达到5ms. 3.System. ...
- Area of a Circle
Area of a Circle Description: Complete the function circleArea so that it will return the area of a ...
- 1521. War Games 2(线段树解约瑟夫)
1521 根据区间和 来确定第k个数在哪 #include <iostream> #include<cstdio> #include<cstring> #inclu ...
- Notepad++加上xml格式化的功能
工作中需要用代码创建一个XML文件,创建完发现XML内容都处在同一行,导致非常不容易查看清楚XML代码.于是习惯性地用 Notepad++查看,想用它来对XML代码格式化一下. 于是找到了TextFX ...
- [ahu 1248] NBA Finals
NBA Finals Time Limit: 1000 ms Case Time Limit: 1000 ms Memory Limit: 64 MBTotal Submission: 251 ...
- ORACLE:profile的管理
PROFILE的管理(资源文件) 当需要设置资源限制时,必须设置数据库系统启动参数RESOURCE_LIMIT,此参数默认值为FALSE 可以使用如下命令来启动当前资源限制: ...
- [转]ASP.NET MVC Jquery Validate 表单验证的多种方式介绍
在我们日常开发过程中,前端的表单验证很重要,如果这块处理不当,会出现很多bug .但是如果处理的好,不仅bug会很少,用户体验也会得到很大的提升.在开发过程中我们可以不借助 JS 库,自己去手写 JS ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调
上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServ ...