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. 详述iOS国际化

    在真正将国际化实践前,只知道通过NSLocalizedString方法将相应语言的字符串加载进来即可.但最近公司项目的新需求增加英文版本,并支持应用内无死角切换~,这才跳过各种坑实现了应用内切换语言, ...

  2. 安装apache重启的时候,报错端口被占用,错误1

    在cmd中执行以下命令来重新分配. netsh winsock reset. 还不行的话可以重启电脑,再不行就算apache配置文件错误.

  3. js中的隐式转换

    js中的不同的数据类型之间的比较转换规则如下: 1. 对象和布尔值比较 对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字 [] == true; //false [] ...

  4. Linux popen/pclose

    popen() 函数 #include <stdio.h>FILE * popen(const char *command , const char *type );int pclose( ...

  5. 【网络流#3】hdu 1532 - Dinic模板题

    输入为m,n表示m条边,n个结点 记下来m行,每行三个数,x,y,c表示x到y的边流量最大为c 这道题的模板来自于网络 http://blog.csdn.net/sprintfwater/articl ...

  6. mui实现支付宝支付功能

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>H ...

  7. (转)C#读取文件路径

    //获取包含清单的已加载文件的路径或 UNC 位置. public static string sApplicationPath = Assembly.GetExecutingAssembly ( ) ...

  8. MinGW 和 MSVC 下,使用 FILE 类型的一个奇怪的问题

    今天遇到一个奇怪的问题. 开发环境: 1. Eclipse CDT,使用 MinGW 的 gcc 编译器和函数库 2. Visual Studio 2008 问题描述: 在 eclipse cdt 中 ...

  9. Spring 3.0就这么简单读书笔记

    一般情况下,spring容器中的大部分Bean都是单实例的,所以一般无须通过@Repository.@Service.@Component等注解的value属性为Bean指定名称,也无须使用@Qual ...

  10. linux学习笔记<基本知识普及>

    linux上分区类型 主分区 : 最多自能有4个 扩展分区 :  最多只能有1个 主分区加扩展分区最多只能有4个 不能写入数据,只能包含逻辑分区 逻辑分区 挂载(安装linux系统时若自定义分区,需注 ...