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

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


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值