先介绍一个方法类,主要是添加好友等方法。
public class XmppService{
/**
* 删除当前用户
* @param connection
* @return
*/
public static boolean deleteAccount(XMPPConnection connection)
{
try {
connection.getAccountManager().deleteAccount();
return true;
} catch (Exception e) {
return false;
}
}
/**
* 返回所有组信息 <RosterGroup>
* @return List(RosterGroup)
*/
public static List<RosterGroup> getGroups(Roster roster) {
List<RosterGroup> groupsList = new ArrayList<RosterGroup>();
Collection<RosterGroup> rosterGroup = roster.getGroups();
Iterator<RosterGroup> i = rosterGroup.iterator();
while (i.hasNext())
groupsList.add(i.next());
return groupsList;
}
/**
* 返回相应(groupName)组里的所有用户<RosterEntry>
* @return List(RosterEntry)
*/
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;
}
/**
* 返回所有用户信息 <RosterEntry>
* @return List(RosterEntry)
*/
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;
}
/**
* 创建一个组
*/
public static boolean addGroup(Roster roster,String groupName)
{
try {
roster.createGroup(groupName);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 删除一个组
*/
public static boolean removeGroup(Roster roster,String groupName)
{
return false;
}
/**
* 添加一个好友 无分组
*/
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
* @return
*/
public static boolean addUsers(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 userJid
* @return
*/
public static boolean removeUser(Roster roster,String userJid)
{
try {
RosterEntry entry = roster.getEntry(userJid);
roster.removeEntry(entry);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 把一个好友添加到一个组中
* @param userJid
* @param groupName
*/
public static void addUserToGroup(final String userJid, final String groupName,
final XMPPConnection connection) {
RosterGroup group = connection.getRoster().getGroup(groupName);
// 这个组已经存在就添加到这个组,不存在创建一个组
RosterEntry entry = connection.getRoster().getEntry(userJid);
try {
if (group != null) {
if (entry != null)
group.addEntry(entry);
} else {
RosterGroup newGroup = connection.getRoster().createGroup("我的好友");
if (entry != null)
newGroup.addEntry(entry);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 把一个好友从组中删除
* @param userJid
* @param groupName
*/
public static void removeUserFromGroup(final String userJid,final String groupName, final XMPPConnection connection) {
RosterGroup group = connection.getRoster().getGroup(groupName);
if (group != null) {
try {
RosterEntry entry = connection.getRoster().getEntry(userJid);
if (entry != null)
group.removeEntry(entry);
} catch (XMPPException e) {
e.printStackTrace();
}
}
}
/**
* 修改心情
* @param connection
* @param status
*/
public static void changeStateMessage(final XMPPConnection connection,final String status)
{
Presence presence = new Presence(Presence.Type.available);
presence.setStatus(status);
connection.sendPacket(presence);
}
}
当对方发送好友申请的时候,主要监听代码:
roster.addRosterListener(
new RosterListener() {
@Override
//监听好友申请消息
public void entriesAdded(Collection<String> invites) {
// TODO Auto-generated method stub
System.out.println("监听到好友申请的消息是:"+invites);
for (Iterator iter = invites.iterator(); iter.hasNext();) {
String fromUserJids = (String)iter.next();
System.out.println("fromUserJids是:"+fromUserJids);
fromUserJid = fromUserJids;
}
if(fromUserJid!=null){
Intent intent = new Intent();
intent.putExtra("USERID", pUSERID);
intent.putExtra("fromUserJid", fromUserJid);
intent.setClass(FriendListActivity.this, FriendListActivity.class);
startActivity(intent);
}
}
@Override
//监听好友同意添加消息
public void entriesUpdated(Collection<String> invites) {
// TODO Auto-generated method stub
System.out.println("监听到好友同意的消息是:"+invites);
for (Iterator iter = invites.iterator(); iter.hasNext();) {
String fromUserJids = (String)iter.next();
System.out.println("同意添加的好友是:"+fromUserJids);
toUserJid = fromUserJids;
}
if(toUserJid!=null){
XmppService.addUserToGroup(toUserJid, pGROUPNAME, connection);
loadFriend();
}
}
@Override
//监听好友删除消息
public void entriesDeleted(Collection<String> delFriends) {
// TODO Auto-generated method stub
System.out.println("监听到删除好友的消息是:"+delFriends);
if(delFriends.size()>0){
loadFriend();
}
}
@Override
//监听好友状态改变消息
public void presenceChanged(Presence presence) {
// TODO Auto-generated method stub
friendMood = presence.getStatus();
System.out.println("presence.getStatus()是:"+presence.getStatus());
}
});
删除好友的设计:
主要代码:
/**
* 长按事件删除好友
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
if(menuInfo instanceof ExpandableListView.ExpandableListContextMenuInfo){
ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
int type = ExpandableListView.getPackedPositionType(info.packedPosition);
if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);
int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);
final FriendInfo dInfo = groupList.get(groupPos).getFriendInfoList().get(childPos);
final GroupInfo gInfo = groupList.get(groupPos);
LayoutInflater layoutInflater= LayoutInflater.from(this);
View delFriendView = layoutInflater.inflate(R.layout.dialog_del_friend, null);
TextView delname = (TextView)delFriendView.findViewById(R.id.delname);
delname.setText(dInfo.getJid());
final CheckBox delCheckBox = (CheckBox)delFriendView.findViewById(R.id.delCheckBox);
Dialog dialog =new AlertDialog.Builder(this)
.setIcon(R.drawable.default_head)
.setTitle("删除好友")
.setView(delFriendView)
.setPositiveButton("确定", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
XmppService.removeUserFromGroup(dInfo.getJid(), gInfo.getGroupName(), connection);
if(delCheckBox.isChecked()){
XmppService.removeUser(roster, dInfo.getJid());
}
Intent intent = new Intent();
intent.putExtra("USERID", pUSERID);
intent.putExtra("fromUserJid", CHECK);
intent.setClass(FriendListActivity.this, FriendListActivity.class);
startActivity(intent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which){
dialog.cancel();
}
})
.create();
dialog.show();
}
}
}