在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → xmpp用于实现即时通讯 android源码下载(仿QQ)

xmpp用于实现即时通讯 android源码下载(仿QQ)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:6.14M
  • 下载次数:41
  • 浏览次数:1061
  • 发布时间:2015-07-05
  • 实例类别:Android平台开发
  • 发 布 人:nihao6681
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 通讯 XMPP

实例介绍

【实例简介】这是一个关于xmpp通讯的项目源码

【实例截图】



【核心代码】

这是与服务器端的配置信息类


package com.sys.android.xmppmanager;

import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.provider.PrivacyProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.GroupChatInvitation;
import org.jivesoftware.smackx.PrivateDataManager;
import org.jivesoftware.smackx.bytestreams.socks5.provider.BytestreamsProvider;
import org.jivesoftware.smackx.packet.ChatStateExtension;
import org.jivesoftware.smackx.packet.LastActivity;
import org.jivesoftware.smackx.packet.OfflineMessageInfo;
import org.jivesoftware.smackx.packet.OfflineMessageRequest;
import org.jivesoftware.smackx.packet.SharedGroupsInfo;
import org.jivesoftware.smackx.provider.AdHocCommandDataProvider;
import org.jivesoftware.smackx.provider.DataFormProvider;
import org.jivesoftware.smackx.provider.DelayInformationProvider;
import org.jivesoftware.smackx.provider.DiscoverInfoProvider;
import org.jivesoftware.smackx.provider.DiscoverItemsProvider;
import org.jivesoftware.smackx.provider.MUCAdminProvider;
import org.jivesoftware.smackx.provider.MUCOwnerProvider;
import org.jivesoftware.smackx.provider.MUCUserProvider;
import org.jivesoftware.smackx.provider.MessageEventProvider;
import org.jivesoftware.smackx.provider.MultipleAddressesProvider;
import org.jivesoftware.smackx.provider.RosterExchangeProvider;
import org.jivesoftware.smackx.provider.StreamInitiationProvider;
import org.jivesoftware.smackx.provider.VCardProvider;
import org.jivesoftware.smackx.provider.XHTMLExtensionProvider;
import org.jivesoftware.smackx.search.UserSearch;
/**
 * xmpp配置页面
 * @author yuanqihesheng
 * @date 2013-04-27
 */
public class XmppConnection {
	
	//public static String SERVER_HOST = "192.168.1.99";//你openfire服务器所在的ip
	//public static  String SERVER_NAME = "aa";//设置openfire时的服务器名
	public static int    SERVER_PORT = 5222;//服务端口 可以在openfire上设置
	public static String SERVER_HOST = "192.168.1.202";//你openfire服务器所在的ip
	public static  String SERVER_NAME = "daihuilin";//设置openfire时的服务器名
    private static XMPPConnection connection = null;
    
	private static void openConnection() {
		try {
			if (null == connection || !connection.isAuthenticated()) {
				XMPPConnection.DEBUG_ENABLED = true;//开启DEBUG模式
				//配置连接
				ConnectionConfiguration config = new ConnectionConfiguration(
						SERVER_HOST, SERVER_PORT,
						SERVER_NAME);
				config.setReconnectionAllowed(true);
				config.setSendPresence(true);
				config.setSASLAuthenticationEnabled(true);
				connection = new XMPPConnection(config);
				connection.connect();//连接到服务器
				//配置各种Provider,如果不配置,则会无法解析数据
				configureConnection(ProviderManager.getInstance());
			}
		} catch (XMPPException xe) {
			xe.printStackTrace();
		}
	}

	/**
	 * 创建连接
	 */	
	public static XMPPConnection getConnection() {
		if (connection == null) {
			openConnection();
		}
		return connection;
	}
	
	/**
	 * 关闭连接
	 */	
	public static void closeConnection() {
		connection.disconnect();
		connection = null;
	}
	/**
	 * xmpp配置
	 */
	private static void configureConnection(ProviderManager pm) {
		// Private Data Storage
		pm.addIQProvider("query", "jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider());
		// Time
		try {
			pm.addIQProvider("query", "jabber:iq:time",Class.forName("org.jivesoftware.smackx.packet.Time"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		// Roster Exchange
		pm.addExtensionProvider("x", "jabber:x:roster",new RosterExchangeProvider());
		// Message Events
		pm.addExtensionProvider("x", "jabber:x:event",new MessageEventProvider());
		// Chat State
		pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
		pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
		pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
		pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
		pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());
		// XHTML
		pm.addExtensionProvider("html", "http://jabber.org/protocol/xhtml-im",new XHTMLExtensionProvider());
		// Group Chat Invitations
		pm.addExtensionProvider("x", "jabber:x:conference",new GroupChatInvitation.Provider());
		// Service Discovery # Items //解析房间列表
		pm.addIQProvider("query", "http://jabber.org/protocol/disco#items",new DiscoverItemsProvider());
		// Service Discovery # Info //某一个房间的信息
		pm.addIQProvider("query", "http://jabber.org/protocol/disco#info",new DiscoverInfoProvider());
		// Data Forms
		pm.addExtensionProvider("x", "jabber:x:data", new DataFormProvider());
		// MUC User
		pm.addExtensionProvider("x", "http://jabber.org/protocol/muc#user",new MUCUserProvider());
		// MUC Admin
		pm.addIQProvider("query", "http://jabber.org/protocol/muc#admin",new MUCAdminProvider());
		// MUC Owner
		pm.addIQProvider("query", "http://jabber.org/protocol/muc#owner",new MUCOwnerProvider());
		// Delayed Delivery
		pm.addExtensionProvider("x", "jabber:x:delay",new DelayInformationProvider());
		// Version
		try {
			pm.addIQProvider("query", "jabber:iq:version",Class.forName("org.jivesoftware.smackx.packet.Version"));
		} catch (ClassNotFoundException e) {
			// Not sure what's happening here.
		}
		// VCard
		pm.addIQProvider("vCard", "vcard-temp", new VCardProvider());
		// Offline Message Requests
		pm.addIQProvider("offline", "http://jabber.org/protocol/offline",new OfflineMessageRequest.Provider());
		// Offline Message Indicator
		pm.addExtensionProvider("offline","http://jabber.org/protocol/offline",new OfflineMessageInfo.Provider());
		// Last Activity
		pm.addIQProvider("query", "jabber:iq:last", new LastActivity.Provider());
		// User Search
		pm.addIQProvider("query", "jabber:iq:search", new UserSearch.Provider());
		// SharedGroupsInfo
		pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup",new SharedGroupsInfo.Provider());
		// JEP-33: Extended Stanza Addressing
		pm.addExtensionProvider("addresses","http://jabber.org/protocol/address",new MultipleAddressesProvider());
		pm.addIQProvider("si", "http://jabber.org/protocol/si",new StreamInitiationProvider());
		pm.addIQProvider("query", "http://jabber.org/protocol/bytestreams",new BytestreamsProvider());
		pm.addIQProvider("query", "jabber:iq:privacy", new PrivacyProvider());
		pm.addIQProvider("command", "http://jabber.org/protocol/commands",new AdHocCommandDataProvider());
		pm.addExtensionProvider("malformed-action","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.MalformedActionError());
		pm.addExtensionProvider("bad-locale","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadLocaleError());
		pm.addExtensionProvider("bad-payload","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadPayloadError());
		pm.addExtensionProvider("bad-sessionid","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.BadSessionIDError());
		pm.addExtensionProvider("session-expired","http://jabber.org/protocol/commands",new AdHocCommandDataProvider.SessionExpiredError());
	}
}


下面是好友列表类



package com.sys.android.activity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ChatManager;
import org.jivesoftware.smack.ChatManagerListener;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;

import com.sys.android.entity.FriendInfo;
import com.sys.android.entity.GroupInfo;
import com.sys.android.util.Utils;
import com.sys.android.xmpp.R;
import com.sys.android.xmppmanager.XmppConnection;
import com.sys.android.xmppmanager.XmppService;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.Toast;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ImageView;
import android.widget.TextView;
/**
 * 好友列表
 */
@SuppressWarnings("all")
public class FriendListActivity extends Activity implements OnGroupClickListener, OnChildClickListener {
	private String pUSERID;//当前用户
	private String pGROUPNAME;//当前组
	private LayoutInflater mChildInflater;
	private ExpandableListView listView;
	private List<GroupInfo> groupList;
	private List<FriendInfo> friendList;
	public static MyAdapter adapter;
	public static FriendListActivity friendListActivity;
	FriendInfo friendInfo;
	GroupInfo groupInfo;
	Roster roster = XmppConnection.getConnection().getRoster();
	public final static int NOTIF_UI = 1000;
	public static final int ADD_FRIEND = 1003;
    private NotificationManager mNotificationManager;
    XMPPConnection connection = XmppConnection.getConnection();
	public static final String CHECK = null;
    private String fromUserJid = null;//发送邀请的用户的userJid
    private String toUserJid = null;//收到邀请的用户的userJid
	private TextView myStatusText = null;
    private String myMood = null;
    private String friendMood = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		friendListActivity = this;
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.friend_list);
		mNotificationManager = (NotificationManager) this.getSystemService(Service.NOTIFICATION_SERVICE);		
		this.pUSERID = getIntent().getStringExtra("USERID");
		this.pGROUPNAME = getIntent().getStringExtra("GROUPNAME");
		this.fromUserJid = getIntent().getStringExtra("fromUserJid");
		TextView friend_list_myName = (TextView)findViewById(R.id.friend_list_myName);
		friend_list_myName.setText(pUSERID);
		listView = (ExpandableListView) findViewById(R.id.contact_list_view);
		registerForContextMenu(listView);
		try {		
			loadFriend();
		} catch (Exception e) {		
			e.printStackTrace();
			Intent intent = new Intent(this,LoginActivity.class);
			startActivity(intent);
			finish();
			Toast.makeText(this, "出错啦",0).show();
			return;
		}
		adapter = new MyAdapter(this);
		listView.setAdapter(adapter);
		listView.setOnGroupClickListener(this);
		listView.setOnChildClickListener(this);
		listView.setOnLongClickListener(new OnLongClickListener() {		
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				return false;
			}
		});
	
		listView.setOnLongClickListener(new OnLongClickListener() {		
			@Override
			public boolean onLongClick(View v) {	
				return false;
			}
		});
		//向好友发送自己的状态
		myStatusText = (TextView)findViewById(R.id.myStatusText);
		String status = myStatusText.getText().toString();
		XmppService.changeStateMessage(connection, status);	
		
		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());
            }     
	                      
	    });  
		
		ChatManager cm = XmppConnection.getConnection().getChatManager();		
		//获取服务器发送来的任何消息
		cm.addChatListener(new ChatManagerListener() {
			@Override
			public void chatCreated(Chat chat, boolean able) {
				chat.addMessageListener(new MessageListener() {
					@Override
					public void processMessage(Chat chat2, Message message) {
							android.os.Message msg=handler.obtainMessage(); 
							System.out.println("服务器发来的消息是:" message.getBody());
							//setNotiType(R.drawable.log, message.getBody());
		                    msg.obj=message.getBody();  
		                    msg.sendToTarget();  
					}
				});
			}
		});
		System.out.println("fromUserJid是:" fromUserJid);
        if(fromUserJid!=null){
    		AlertDialog.Builder dialog=new AlertDialog.Builder(FriendListActivity.this);
			dialog.setTitle("好友申请")
			      .setIcon(R.drawable.log)
			      .setMessage("【" fromUserJid "】向你发来好友申请,是否添加对方为好友?")
			      .setPositiveButton("添加", new DialogInterface.OnClickListener() {
		                     @Override
		                     public void onClick(DialogInterface dialog, int which) {		 
		                         // TODO Auto-generated method stub	
	                    	     dialog.cancel();//取消弹出框
	                    	     //允许添加好友则回复消息,被邀请人应当也发送一个邀请请求。
	                    	     Presence subscription = new Presence(Presence.Type.subscribe);
	                             subscription.setTo(fromUserJid);
	                             XmppConnection.getConnection().sendPacket(subscription);
	                             System.out.println("pGROUPNAME是:" pGROUPNAME);
	                             if(pGROUPNAME == null){
	                            	 pGROUPNAME = "我的好友";
	                             }
	                             XmppService.addUserToGroup(fromUserJid, pGROUPNAME, connection);
	                             Intent intent = new Intent();
	                    	     intent.putExtra("USERID", pUSERID);
	                    	     intent.putExtra("fromUserJid", CHECK);
	                   			 intent.setClass(FriendListActivity.this, FriendListActivity.class);
	                   			 startActivity(intent); 
		                     }
		                   })
			       .setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
			                 public void onClick(DialogInterface dialog, int which) {			 
			                     // TODO Auto-generated method stub
			                	 XmppService.removeUser(roster, fromUserJid);
			                     dialog.cancel();//取消弹出框
			                 }
			               }).create().show();
    	}         
	}

	protected void setNotiType(int iconId, String s) {
		Intent intent = new Intent();
		intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		PendingIntent appIntent = PendingIntent.getActivity(this, 0, intent, 0);
		Notification myNoti = new Notification();
		myNoti.icon = iconId;
		myNoti.tickerText = s;
		myNoti.defaults = Notification.DEFAULT_SOUND;
		myNoti.flags |= Notification.FLAG_AUTO_CANCEL;
		myNoti.setLatestEventInfo(this, "QQ消息", s, appIntent);
		mNotificationManager.notify(0, myNoti);
	}
	
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 1:
				String[] args = (String[]) msg.obj;
				break;			
			default:
				break;
			}
		};
	};
	
	public void loadFriend() {
		try {
			XMPPConnection conn = XmppConnection.getConnection();
			Roster roster = conn.getRoster();
			Collection<RosterGroup> groups = roster.getGroups();
			groupList = new ArrayList<GroupInfo>();
			for (RosterGroup group : groups) {
				groupInfo = new GroupInfo();
				friendList = new ArrayList<FriendInfo>();
				groupInfo.setGroupName(group.getName());
				Collection<RosterEntry> entries = group.getEntries();
				for (RosterEntry entry : entries) {
					if("both".equals(entry.getType().name())){//只添加双边好友 
						friendInfo = new FriendInfo();
						friendInfo.setUsername(Utils.getJidToUsername(entry.getUser()));
						System.out.println("我的好友心情是:" entry.getStatus().fromString(entry.getUser()));
						if(friendMood == null){
							friendMood ="Q我吧,静待你的来信!";
						}
						friendInfo.setMood(friendMood);
						friendList.add(friendInfo);
						friendInfo = null;			
					}
				}
				groupInfo.setFriendInfoList(friendList);
				groupList.add(groupInfo);
				groupInfo = null;
			}
		if(groupList.isEmpty()){
			groupInfo = new GroupInfo();
			groupInfo.setGroupName("我的好友");
			groupInfo.setFriendInfoList(new ArrayList<FriendInfo>());
			groupList.add(groupInfo);
			groupInfo = null;
		}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onResume() {
		adapter.notifyDataSetChanged();
		super.onResume();
	}
	
	@Override
	protected void onDestroy() {
		XmppConnection.closeConnection();
		Intent intent = new Intent(this, XmppService.class);
		stopService(intent);
		friendListActivity = null;
		super.onDestroy();
	}
	public class MyAdapter extends BaseExpandableListAdapter {
		Context context;
		public MyAdapter(Context context){
			mChildInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}
		class FriendHolder{
			TextView name;
			TextView mood;
			ImageView iv;
		}
		
		@Override
		public int getGroupCount() {
			// TODO Auto-generated method stub
			return groupList.size();
		}

		@Override
		public int getChildrenCount(int groupPosition) {
			// TODO Auto-generated method stub
			return groupList.get(groupPosition).getFriendInfoList().size();
		}

		@Override
		public GroupInfo getGroup(int groupPosition) {
			
			return groupList.get(groupPosition);
		}
		public GroupInfo getGroup(String groupName) {
			GroupInfo groupInfo = null;
			if(getGroupCount() > 0){
				for(int i = 0,j = getGroupCount();i< j;i  ){
					GroupInfo holder = (GroupInfo) getGroup(i);
					if(TextUtils.isEmpty(holder.getGroupName())){
						groupList.remove(holder);
					}else{
						if(holder.getGroupName().equals(groupInfo)){
							groupInfo = holder;
						}
					}
				}
			}
			return groupInfo;
		}

		@Override
		public FriendInfo getChild(int groupPosition, int childPosition) {
			// TODO Auto-generated method stub
			return groupList.get(groupPosition).getFriendInfoList().get(childPosition);
		}

		@Override
		public long getGroupId(int groupPosition) {
			// TODO Auto-generated method stub
			return groupPosition;
		}

		@Override
		public long getChildId(int groupPosition, int childPosition) {
			// TODO Auto-generated method stub
			return childPosition;
		}

		@Override
		public boolean hasStableIds() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public View getGroupView(int groupPosition, boolean isExpanded,
				View convertView, ViewGroup parent) {
				FriendHolder holder;
				if(convertView == null){
					holder = new FriendHolder();					
					convertView = mChildInflater.inflate(R.layout.friend_group_item,null);
					holder.name =  (TextView) convertView.findViewById(R.id.friend_group_list_name);
					holder.iv = (ImageView) convertView.findViewById(R.id.friend_group_list_icon);
					convertView.setTag(holder);
				}else{
					holder = (FriendHolder) convertView.getTag();
				}
				String groupname = groupList.get(groupPosition).getGroupName();
				holder.name.setText(groupname);
				if(isExpanded){
					holder.iv.setBackgroundResource(R.drawable.sc_group_expand);
				}else{
					holder.iv.setBackgroundResource(R.drawable.sc_group_unexpand);		
				}		
				return convertView;
		}

		@Override
		public View getChildView(int groupPosition, int childPosition,
				boolean isLastChild, View convertView, ViewGroup parent) {
			    FriendHolder holder;
				if(convertView == null){
					holder = new FriendHolder();
					convertView = mChildInflater.inflate(R.layout.friend_child_item,null);
					holder.name =  (TextView) convertView.findViewById(R.id.friend_nickname);
					holder.mood =  (TextView) convertView.findViewById(R.id.friend_mood);
					convertView.setTag(holder);
				}else{
					holder = (FriendHolder) convertView.getTag();
				}
				FriendInfo groupname = groupList.get(groupPosition).getFriendInfoList().get(childPosition);
				holder.name.setText(groupname.getUsername());
				holder.mood.setText(groupname.getMood());
				if(isLastChild){
					listView.setItemChecked(groupPosition, true);
				}
				return convertView;
		}

		@Override
		public boolean isChildSelectable(int groupPosition, int childPosition) {
			// TODO Auto-generated method stub
			return true;
		}
	}

	@Override
	public boolean onGroupClick(ExpandableListView parent, View view,
			int groupPosition, long id) {
		return false;
	}

	@Override
	public boolean onChildClick(ExpandableListView parent, View v,
			int groupPosition, int childPosition, long id) {
		FriendInfo info = groupList.get(groupPosition).getFriendInfoList().get(childPosition);
		Intent intent = new Intent(this,ChatActivity.class);
		String pFRIENDID = info.getJid();
		intent.putExtra("FRIENDID", pFRIENDID);
		intent.putExtra("user", pFRIENDID);
		intent.putExtra("USERID", pUSERID);
		startActivity(intent);
		return false;
	}
	
	@Override
	public void onBackPressed() {
		Intent i = new Intent(Intent.ACTION_MAIN);
		i.addCategory(Intent.CATEGORY_HOME);
		startActivity(i);
	}
	
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		menu.clear();
		menu.add(Menu.NONE, Menu.FIRST   1, 1,"刷新列表").setIcon(R.drawable.menu_refresh);
		menu.add(Menu.NONE, Menu.FIRST   2, 1,"更新心情").setIcon(R.drawable.menu_setting);
		menu.add(Menu.NONE, Menu.FIRST   3, 1,"添加好友").setIcon(R.drawable.addfriends_icon_icon);
		menu.add(Menu.NONE, Menu.FIRST   4, 1,"退出登录").setIcon(R.drawable.menu_exit);
		return super.onPrepareOptionsMenu(menu);
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case Menu.FIRST   1:
			friendMood = "去死吧!";
			loadFriend();
//			Intent intent1 = new Intent();
//			intent1.putExtra("USERID", pUSERID);
//			intent1.putExtra("MOOD", moods);
//			intent1.setClass(FriendListActivity.this, FriendListActivity.class);
//			startActivity(intent1);
			break;
		case Menu.FIRST   2:
			LayoutInflater layoutInflater= LayoutInflater.from(this);
            final View myMoodView = layoutInflater.inflate(R.layout.dialog_mood, null);           
            Dialog dialog =new AlertDialog.Builder(this)
            .setView(myMoodView)
            .setPositiveButton("更改", new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which){
                	myMood = ((EditText)myMoodView.findViewById(R.id.myMood)).getText().toString().trim();
                    System.out.println("我更改的心情是:" myMood);
                    XmppService.changeStateMessage(connection, myMood);
                    myStatusText.setText(myMood);
                }
            })
            .setNegativeButton("取消", new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialog, int which){
                	dialog.cancel();
                 }
            })
            .create();
            dialog.show();
			break;
		case Menu.FIRST   3:
			Intent intent11 = new Intent();
			intent11.putExtra("USERID", pUSERID);
			intent11.setClass(FriendListActivity.this, FriendAddActivity.class);
			startActivity(intent11);
			break;
		case Menu.FIRST   4:
			XmppService.deleteAccount(connection);
            Intent exits = new Intent(Intent.ACTION_MAIN);		
            exits.addCategory(Intent.CATEGORY_HOME);
            exits.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(exits);
            System.exit(0);
			break;
		}
		return super.onOptionsItemSelected(item);
	}
	
	/**
	 * 长按事件删除好友
	 */
	@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();
			}
		}
	}
}


标签: 通讯 XMPP

实例下载地址

xmpp用于实现即时通讯 android源码下载(仿QQ)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警