实例介绍
【实例截图】
【核心代码】
这是与服务器端的配置信息类
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();
}
}
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论