先介绍一个方法类,主要是添加好友等方法。
- 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();
- }
- }
- }