手机上使用asmack开发xmpp客户端
openfire服务端,smack:
下载地址:http://www.igniterealtime.org/downloads/index.jsp
源代码:http://www.igniterealtime.org/downloads/source.jsp
android客户端库,asmack:
首页:https://github.com/Flowdalic/asmack
源代码及jar包:http://asmack.freakempire.de/
服务端搭建指导:http://www.cnblogs.com/hoojo/archive/2012/05/17/2506769.html
客户端样例:http://www.cnblogs.com/hoojo/archive/2012/06/25/2561576.html
自己编写的样例应用:http://files.cnblogs.com/jerry1999/xmppClient.rar
主要代码:
package com.example.xmppTest; import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet; import android.util.Log; public class XMPPTester {
private XMPPConnection connection;
private InteractCallback interactCallback; public XMPPTester(InteractCallback paramInteractCallback) {
this.interactCallback = paramInteractCallback;
} private void printLog(String paramString) {
System.out.println(paramString);
Log.v("XMPPTester", paramString);
} public void connectXMPP(String paramString1, int paramInt,
String paramString2, String paramString3, String paramString4)
throws XMPPException {
ConnectionConfiguration localConnectionConfiguration = new ConnectionConfiguration(
paramString1, paramInt);
localConnectionConfiguration.setDebuggerEnabled(true);
localConnectionConfiguration.setSASLAuthenticationEnabled(true);
localConnectionConfiguration
.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
localConnectionConfiguration.setServiceName(paramString4);
localConnectionConfiguration.setCompressionEnabled(true);
localConnectionConfiguration.setReconnectionAllowed(true);
this.connection = new XMPPConnection(localConnectionConfiguration);
this.connection.connect();
loginUser(paramString2, paramString3);
} public void loginUser(String userName, String password)
throws XMPPException {
this.connection.login(userName, password);
this.connection.addPacketListener(new PacketListener() {
public void processPacket(Packet paramAnonymousPacket) {
String str = paramAnonymousPacket.toXML();
XMPPTester.this.interactCallback.onReceived(str);
}
}, new PacketFilter() {
public boolean accept(Packet paramAnonymousPacket) {
XMPPTester.this.printLog("PacketFilter.accept");
return true;
}
});
} public void sendMessage(String paramString1, String paramString2)
throws XMPPException {
Chat localChat = this.connection.getChatManager().createChat(
paramString1, new MyMessageListeners());
Message localMessage = new Message();
localMessage.setBody(paramString2);
localChat.sendMessage(localMessage);
} class MyMessageListeners implements MessageListener {
MyMessageListeners() {
} public void processMessage(Chat paramChat, Message paramMessage) {
}
}
}
package com.example.xmppTest;
public interface InteractCallback {
public abstract void onConnected();
public abstract void onException(Exception paramException);
public abstract void onReceived(String paramString);
public abstract void onSentSuccess();
}
package com.example.xmppTest; import org.jivesoftware.smack.XMPPException; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity implements InteractCallback,
View.OnClickListener {
Button connectButton;
private String host;
private EditText hostEditText;
InteractHandler interactHandler = new InteractHandler();
private String message;
private EditText messageEditText;
private String name;
private EditText nameEditText;
private EditText passEditText;
private String password;
private int port;
private EditText portEditText;
Button sendButton;
private EditText serviceEditText;
private String serviceName;
private String to;
private EditText toEditText;
private XMPPTester xMPPTester = new XMPPTester(this); private void initFieldVars() {
this.connectButton = ((Button) findViewById(R.id.connectButton));
this.sendButton = ((Button) findViewById(R.id.sendButton));
this.hostEditText = ((EditText) findViewById(R.id.hostEditText1));
this.portEditText = ((EditText) findViewById(R.id.portEditText));
this.serviceEditText = ((EditText) findViewById(R.id.serviceEditText));
this.nameEditText = ((EditText) findViewById(R.id.nameEditText));
this.passEditText = ((EditText) findViewById(R.id.passEditText));
this.toEditText = ((EditText) findViewById(R.id.toEditText));
this.messageEditText = ((EditText) findViewById(R.id.messageEditText));
} private void initInputFields() {
this.host = this.hostEditText.getText().toString();
this.port = Integer.parseInt(this.portEditText.getText().toString());
this.serviceName = this.serviceEditText.getText().toString();
this.name = this.nameEditText.getText().toString();
this.password = this.passEditText.getText().toString();
this.to = (this.toEditText.getText().toString() + "@" + this.serviceName);
this.message = this.messageEditText.getText().toString();
} @SuppressWarnings("unchecked")
private void onConnectButtonClick() {
initInputFields();
new AsyncTask() {
protected Object doInBackground(Object... paramAnonymousVarArgs) {
try {
MainActivity.this.xMPPTester.connectXMPP(
MainActivity.this.host, MainActivity.this.port,
MainActivity.this.name, MainActivity.this.password,
MainActivity.this.serviceName);
Log.v("XMPPTester", "connected." + MainActivity.this.name);
MainActivity.this.onConnected();
return null;
} catch (XMPPException localXMPPException) {
for (;;) {
MainActivity.this.onException(localXMPPException);
localXMPPException.printStackTrace();
Log.v("XMPPTester",
"error: " + localXMPPException.getMessage());
}
}
}
}.execute(new Object[0]);
} private void onSendButtonClick() {
initInputFields();
new AsyncTask() {
protected Object doInBackground(Object... paramAnonymousVarArgs) {
try {
MainActivity.this.xMPPTester.sendMessage(
MainActivity.this.to, MainActivity.this.message);
Log.v("XMPPTester", "Sent ." + MainActivity.this.name);
MainActivity.this.onSentSuccess();
return null;
} catch (XMPPException localXMPPException) {
for (;;) {
MainActivity.this.onException(localXMPPException);
localXMPPException.printStackTrace();
Log.v("XMPPTester",
"error: " + localXMPPException.getMessage());
}
}
}
}.execute(new Object[0]);
} public void onClick(View paramView) {
switch (paramView.getId()) {
case R.id.connectButton:
onConnectButtonClick();
return;
case R.id.sendButton:
onSendButtonClick();
return;
}
} public void onConnected() {
Message localMessage = new Message();
Bundle localBundle = new Bundle();
localBundle.putString("result", "Connect success");
localMessage.setData(localBundle);
this.interactHandler.sendMessage(localMessage);
} protected void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.main);
initFieldVars();
this.connectButton.setOnClickListener(this);
this.sendButton.setOnClickListener(this);
} public void onException(Exception paramException) {
Message localMessage = new Message();
Bundle localBundle = new Bundle();
localBundle
.putString("result", "Error: " + paramException.getMessage());
localMessage.setData(localBundle);
this.interactHandler.sendMessage(localMessage);
} public void onReceived(String paramString) {
Message localMessage = new Message();
Bundle localBundle = new Bundle();
localBundle.putString("result", "Received: " + paramString);
localMessage.setData(localBundle);
this.interactHandler.sendMessage(localMessage);
} public void onSentSuccess() {
Message localMessage = new Message();
Bundle localBundle = new Bundle();
localBundle.putString("result", "Sent success");
localMessage.setData(localBundle);
this.interactHandler.sendMessage(localMessage);
} class InteractHandler extends Handler {
public void handleMessage(Message paramMessage) {
super.handleMessage(paramMessage);
String str = paramMessage.getData().get("result").toString();
Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
}
}
}
手机上使用asmack开发xmpp客户端的更多相关文章
- 使用termux在安卓手机上搭建python开发环境
下载安装termux应用. 应用链接如下:https://download.csdn.net/upload/11342944设置-应用-termux赋予存储权限 cd mkdir .termux vi ...
- WPF一步步开发XMPP IM客户端1:入门
[起因&目标] 因为工作原因接触openfire服务端和spark客户端开发,主要是基于openfire扩展开发了针对企业用途的服务器插件,还开发了各个平台上的客户端(Windows\mac\ ...
- XMPP客户端开发(1)--连接和登录
Smack可用于XMPP客户端的开发,下载Smack,将相关jar文件导入后,即可以开始XMPP客户端的开发. 以下代码实现了客户端连接Tigase服务器,并根据用户名和密码登录. package X ...
- ios 给微信开发一个插件并安装到未越狱的手机上教程
现来整体说一下思路,首先给越狱的手机开发一个插件并安装上去,然后去越狱手机上找到相应的动态库和对应的微信APP安装包,拷贝出来,然后重新签名,就可以安装到未越狱的手机上了 1.首先你的电脑需要安装th ...
- android的开发 华为手机上不显示menu键
android的开发,华为手机上不显示menu键解决办法: 在AndroidManifest.xml中讲targetSdkVersion改为9. <uses-sdk android:minSdk ...
- 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...
- 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接(转)
前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...
- HDD线上沙龙·创新开发专场:多元服务融合,助力应用创新开发
5月24日,由华为开发者联盟主办的HUAWEI Developer Day(华为开发者日,简称HDD)线上沙龙·创新开发专场在华为开发者学堂及各大直播平台与广大开发者见面.直播内容主要聚焦Harmon ...
- 关于如何在github上创建团队开发环境
今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...
随机推荐
- [Angular + Webpack] ocLazyLoad compoment
$stateProvider .state('landing', { url: '/', views: { 'body@': { template: '<olr-landing></ ...
- Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
遇着这个提示的话,如果本地只安装了一个mysql,这里写的很详细的 http://www.blogjava.net/asenyifei/articles/82575.html 看这里可以解决,如果本地 ...
- #include<iostream.h>与#include<iostream> using namespace std的区别
所谓namespace,是指标识符的各种可见范围.C++标准程序库中的所有标识符都被定义于一个名为std的namespace中. 一 :<iostream>和<iostream.h ...
- SparseArray HashMap 稀疏数组 二分法
简介 HashMap是java里比较常用的一个集合类,我们常用其来缓存一些处理后的结果,但是在Android项目中,Eclipse却给出了一个 performance 警告.意思就是说用SparseA ...
- codevs 1733 聪明的打字员 (Bfs)
/* Bfs+Hash 跑的有点慢 但是codevs上时间限制10s 也ok */ #include<iostream> #include<cstdio> #include&l ...
- Jquery插件-Html5图片上传并裁剪
/** * 图片裁剪 * @author yanglizhe * 2015/11/16 */ (function($){ /** * Drag */ var Drag={obj:null,init:f ...
- svg学习笔记
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- ASP.Net MVC 之FileResult
FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端.ASP.NET MVC定义了三个具体的FileResult,分 ...
- Nginx环境下常见的开源项目重写汇总
我们做PHP开发的,作者寒冰我觉得大部分时候都在跟开源的系统打交道.比如:Discuz.PHPCMS.ecshop.wordpress等开源系统.一般我们都是在本地搭建测试环境,用的web服务器都是a ...
- Oracle中REGEXP_SUBSTR函数(转)
Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','2 ...