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