即时通讯之smack客户端配置
2015-03-09 14:39
375 查看
之前学习了通过Openfire+spark+smack的模式来完成我们的即时通讯软件,上次我们已经完成了Openfire的安装和配置,这次我们继续完成我们的客户端部分。
1.首先我们通过百度smack来下载我们所需要的jar包,将下载好的jar包导入到我们的工程中,创建一个工具类XmppTool:
聊天客户端
其中有好多类都是自带的我们只需要实现它就可以了。
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
1.首先我们通过百度smack来下载我们所需要的jar包,将下载好的jar包导入到我们的工程中,创建一个工具类XmppTool:
package com.xmpp.client; import java.io.File; import java.util.ArrayList; import java.util.Date; 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.XMPPException; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import org.jivesoftware.smackx.filetransfer.FileTransfer; import org.jivesoftware.smackx.filetransfer.FileTransfer.Status; import org.jivesoftware.smackx.filetransfer.FileTransferListener; import org.jivesoftware.smackx.filetransfer.FileTransferManager; import org.jivesoftware.smackx.filetransfer.FileTransferRequest; import org.jivesoftware.smackx.filetransfer.IncomingFileTransfer; import org.jivesoftware.smackx.filetransfer.OutgoingFileTransfer; import org.jivesoftware.smackx.muc.MultiUserChat; import org.jivesoftware.smackx.packet.DelayInformation; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.lidroid.xutils.HttpUtils; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; import com.xmpp.client.util.ScreenShot; import com.xmpp.client.util.TimeRender; import com.xmpp.client.util.XmppTool; public class FormClient extends Activity { private MyAdapter adapter; private List<Msg> listMsg = new ArrayList<Msg>(); private String pUSERID; private EditText msgText, toText; private ProgressBar pb; private Button btsend; private TextView waitpb; private String URL; private String PCNAME; private String PERSON; private Chat mychat; private ChatManager cm; public class Msg { String userid; String msg; String date; String from; public Msg(String userid, String msg, String date, String from) { this.userid = userid; this.msg = msg; this.date = date; this.from = from; } } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.formclient); // 获取Intent传过来的用户名,url,pcname this.pUSERID = getIntent().getStringExtra("USERID"); this.URL = getIntent().getStringExtra("URL"); this.PCNAME = getIntent().getStringExtra("PCNAME"); ListView listview = (ListView) findViewById(R.id.formclient_listview); listview.setTranscriptMode(ListView.TRANSCRIPT_MODE_ALWAYS_SCROLL); this.adapter = new MyAdapter(this); listview.setAdapter(adapter); // 获取文本信息 this.msgText = (EditText) findViewById(R.id.formclient_text); // 获取聊天对象 this.toText = (EditText) findViewById(R.id.formclient_to); // 发送消息给water-pc服务器water(获取自己的服务器,和好友) // 消息监听 cm = XmppTool.getConnection(URL, PCNAME).getChatManager(); chatListener(); // 发送消息 btsend = (Button) findViewById(R.id.formclient_btsend); sendChatMessage(); } /** * send chat message * */ private void sendChatMessage() { btsend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取text文本 String msg = msgText.getText().toString(); PERSON = toText.getText().toString(); mychat = cm.createChat(PERSON + "@" + PCNAME, null); if (msg.length() > 0) { // 发送消息 listMsg.add(new Msg(pUSERID, msg, TimeRender.getDate(), "OUT")); // 刷新适配器 adapter.notifyDataSetChanged(); try { // 发送消息给指定人 mychat.sendMessage(msg); } catch (XMPPException e) { e.printStackTrace(); } } else { Toast.makeText(FormClient.this, "请输入信息", Toast.LENGTH_SHORT) .show(); } // 清空text msgText.setText(""); } }); } /** * 监听单人消息 */ private void chatListener() { cm.addChatListener(new ChatManagerListener() { @Override public void chatCreated(Chat chat, boolean able) { chat.addMessageListener(new MessageListener() { @Override public void processMessage(Chat chat2, Message message) { Log.v("--tags--", "--tags-form--" + message.getFrom()); Log.v("--tags--", "--tags-message--" + message.getBody()); // 收到来自water-pc服务器water的消息(获取自己的服务器,和好友) if (message.getFrom().contains(pUSERID + "@keyi-pc")) { // 获取用户、消息、时间、IN String[] args = new String[] { pUSERID, message.getBody(), TimeRender.getDate(), "IN" }; android.os.Message msg = handler.obtainMessage(); msg.what = 1; msg.obj = args; msg.sendToTarget(); } else { } Log.i("json", "b " + message.getBody()); String amsg = message.getBody(); String[] args = null; args = new String[] { message.getFrom(), amsg, TimeRender.getDate(), "IN" }; android.os.Message msg = handler .obtainMessage(); msg.what = 1; msg.obj = args; msg.sendToTarget(); } }); } }); } private OutgoingFileTransfer fileTransfer; Handler outHandler = new Handler(); Runnable outrunnable = new Runnable() { @Override public void run() { if (fileTransfer.getProgress() == 1) { pb.setVisibility(View.GONE); outHandler.removeCallbacks(outrunnable); } outHandler.postDelayed(outrunnable, 100); } }; private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: // 获取消息并显示 String[] args = (String[]) msg.obj; listMsg.add(new Msg(args[0], args[1], args[2], args[3])); // 刷新适配器 adapter.notifyDataSetChanged(); break; case 2: // 附件进度条 if (pb.getVisibility() == View.GONE) { pb.setVisibility(View.VISIBLE); waitpb.setVisibility(View.VISIBLE); } break; case 3: pb.setProgress(msg.arg1); break; case 4: pb.setVisibility(View.GONE); waitpb.setVisibility(View.GONE); break; default: break; } }; }; // 退出 @Override public void onBackPressed() { super.onBackPressed(); XmppTool.closeConnection(); System.exit(0); android.os.Process.killProcess(android.os.Process.myPid()); } class MyAdapter extends BaseAdapter { private Context cxt; private LayoutInflater inflater; public MyAdapter(FormClient formClient) { this.cxt = formClient; } @Override public int getCount() { return listMsg.size(); } @Override public Object getItem(int position) { return listMsg.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 显示消息的布局:内容、背景、用户、时间 this.inflater = (LayoutInflater) this.cxt .getSystemService(Context.LAYOUT_INFLATER_SERVICE); // IN,OUT的图片 if (listMsg.get(position).from.equals("IN")) { convertView = this.inflater.inflate( R.layout.formclient_chat_in, null); } else { convertView = this.inflater.inflate( R.layout.formclient_chat_out, null); } TextView useridView = (TextView) convertView .findViewById(R.id.formclient_row_userid); TextView dateView = (TextView) convertView .findViewById(R.id.formclient_row_date); TextView msgView = (TextView) convertView .findViewById(R.id.formclient_row_msg); useridView.setText(listMsg.get(position).userid); dateView.setText(listMsg.get(position).date); msgView.setText(listMsg.get(position).msg); return convertView; } } }
聊天客户端
其中有好多类都是自带的我们只需要实现它就可以了。
作者:杰瑞教育
出处:http://www.cnblogs.com/jerehedu/
本文版权归烟台杰瑞教育科技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
相关文章推荐
- 即时通讯之smack客户端配置
- openfire+smack 实现即时通讯基本框架
- Oracle Instant Client(即时客户端) 安装与配置 PLSQL Developer
- OPC客户端与服务器远程通讯具体配置说明
- 基于XMPP协议的即时通讯工具的客户端实现原理
- 老二牛车Oracle oracle即时客户端Instant Client连接Oracle同时配置解决乱码问题
- win8 X64上安装32位Oracle Instant Client(即时客户端) 安装与配置
- Oracle Database Instant Client即时客户端配置使用
- IOS 即时通讯的框架 配置环境
- Oracle Instant Client(即时客户端) 安装与配置
- Oracle Instant Client(即时客户端) 安装与配置
- 程矢Oracle oracle即时客户端Instant Client连接Oracle同时配置解决乱码问题
- Oracle数据库即时客户端PLSQL的配置:配置ORACLE 11g绿色版客户端和PLSQL环境
- Oracle Instant Client(即时客户端) 安装与配置
- Windows下面配置 Oracle10g 即时客户端
- Oracle Database Instant Client即时客户端配置使用
- PL/SQL Developer 17.3.1下载与Oracle Instant Client 12.2(即时客户端) 安装与配置
- 即时通讯里android客户端心跳机制的分析和实现
- iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之xmpp环境搭建(数据库/客户端/服务器)
- ORACLE即时客户端及PL/SQL的联合配置