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客户端的更多相关文章

  1. 使用termux在安卓手机上搭建python开发环境

    下载安装termux应用. 应用链接如下:https://download.csdn.net/upload/11342944设置-应用-termux赋予存储权限 cd mkdir .termux vi ...

  2. WPF一步步开发XMPP IM客户端1:入门

    [起因&目标] 因为工作原因接触openfire服务端和spark客户端开发,主要是基于openfire扩展开发了针对企业用途的服务器插件,还开发了各个平台上的客户端(Windows\mac\ ...

  3. XMPP客户端开发(1)--连接和登录

    Smack可用于XMPP客户端的开发,下载Smack,将相关jar文件导入后,即可以开始XMPP客户端的开发. 以下代码实现了客户端连接Tigase服务器,并根据用户名和密码登录. package X ...

  4. ios 给微信开发一个插件并安装到未越狱的手机上教程

    现来整体说一下思路,首先给越狱的手机开发一个插件并安装上去,然后去越狱手机上找到相应的动态库和对应的微信APP安装包,拷贝出来,然后重新签名,就可以安装到未越狱的手机上了 1.首先你的电脑需要安装th ...

  5. android的开发 华为手机上不显示menu键

    android的开发,华为手机上不显示menu键解决办法: 在AndroidManifest.xml中讲targetSdkVersion改为9. <uses-sdk android:minSdk ...

  6. 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接

    前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...

  7. 如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接(转)

    前期准备: 关于什么是Hierarchy Viewer,请查看官方文档:http://developer.android.com/tools/debugging/debugging-ui.html.个 ...

  8. HDD线上沙龙·创新开发专场:多元服务融合,助力应用创新开发

    5月24日,由华为开发者联盟主办的HUAWEI Developer Day(华为开发者日,简称HDD)线上沙龙·创新开发专场在华为开发者学堂及各大直播平台与广大开发者见面.直播内容主要聚焦Harmon ...

  9. 关于如何在github上创建团队开发环境

    今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...

随机推荐

  1. Eclipse ADT的Custom debug keystore所需证书规格

    最近开始研究Google Play的In-app Billing IAB内置计费API,发现一个比较烦人的问题就是测试时应用必须经过正式签名,而默认Eclipse ADT调试运行使用的是临时生成的De ...

  2. Coding Your Life

    前几天看到篇文章,写的是科技让人变得陌生,balabala,总的说来就科技让邻居是男是女不知道了,朋友见面少了之类的.其实我觉得,也不能全怪科技发展的太快,而是人心都飘到网路上了,像我这一辈已经老去的 ...

  3. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项

    本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM. 一. Bitmap的使用tri ...

  4. 使用nice命令调整进程优先级

    Adjusting Process Priority with nice   When Linux processes are started, they are started with a spe ...

  5. 计算方法(三)C#矩阵类库

    测量平差以及工科中常常用到矩阵的相关运算,因此自己写了一个,同时考虑到了类库的可用性,这次又重载了比较匀运算符,修正了一些问题 using System; using System.Collectio ...

  6. ASP.NET-FineUI开发实践-9

    用了FineUI有一段时间了,还是分享下我咋改的吧,没想的那么难,我也是从小白来的. 基础是要懂JQ和EXTJS,主要是要懂JQ和EXTJS能干啥,这里有两个网站 http://www.w3schoo ...

  7. (转)jquery.validate.js 的 remote 后台验证

    之前已经有一篇关于jquery.validate.js验证的文章,还不太理解的可以先看看:jQuery Validate 表单验证(这篇文章只是介绍了一下如何实现前台验证,并没有涉及后台验证remot ...

  8. cognos开发与部署报表到广西数据质量平台

    1.cognos报表的部署. 参数制作的步骤: 1.先在cognos里面把做好的报表路径拷贝,然后再拷贝陈工给的报表路径. 开始做替换,把陈工给的报表路径头拿到做好的报表路径中,如下面的链接http: ...

  9. JavaScript--Json对象

    JSON(JavaScript Object  Notation)一种简单的数据格式,比xml更轻巧.JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何 ...

  10. Delphi之TreeView

    TreeView是Delphi中使用频率比较高的一个控件,虽然使用次数很多,但总结不够.借着这次做GDW原型的机会总结一下,写的过程中也会参考网上的博文. TTreeView.TTreeNodes和T ...