XMPP——Smack[4]状态,心情,头像更改

这里写完,最基本的IM功能也就完了,

还剩下个发送接收文件,离线消息扩展等等

 

呵呵,三天时间,看的不是很深入,欢迎大家补充呀

 

1.       修改自身状态

包括上线,隐身,对某人隐身,对某人上线

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

2.       心情修改

/** 
     * 修改心情 
     * @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);  
      
    }  

3.       修改用户头像

有点麻烦,主要是读入图片文件,编码,传输之

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

4.  补充,用户状态的监听

 

即对方改变头像,状态,心情时,更新自己用户列表,其实这里已经有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");  
                    }     
                      
                });  
              

下一篇主要是文件传输和接收


http://blog.csdn.net/wklken/article/details/6460117

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值