手机上使用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 ...
随机推荐
- 设计模式(二)工厂模式Factory (创建型)
工厂模式分为三种:简单工厂模式 (Simple Factory) .工厂方法模式(Factory Method).抽象工厂模式(Abstract Factory) //举例:发送邮件和短信的例子 /* ...
- C primer plus 读书笔记第八章
本章的标题是字符输入/输出和输入确认.主要内容是讨论用于I/O的标准函数. 1.getchar()和putchar() 这两个函数之前用过,我们通过这两个函数来讨论下缓冲区. #include &qu ...
- UITableView显示不全
先上图(不全图片): 正确图片: 原因例如以下: 1.在tableView的父视图的freme问题. 2.tableView本身的frame问题.大小依据自己的实际情况改过来就OK了 希望能够帮助到你 ...
- [转] 看懂UML类图和时序图
PS: 组合关系:实心,一个类A属于另一个类,或多个类,但是类A不能单独存在去使用,A一般是一种抽象的东西 聚合关系:空心,一个类A可以单独存在使用 不论组合聚合,A的方法都会被直接调用. 看懂UML ...
- Entity Framework Code First 多数据库 控制台迁移代码
1.启动迁移 Enable Migrations Enable-Migrations -MigrationsDirectory "MigrationsOne" -ContextTy ...
- css元素居中
水平居中 若为行内元素,对其父元素用text-align:center即可: 若为块元素(无浮动),则一般有两种方法可实现对其的水平居中,一为margin:0 auto;二为通过css计算函数calc ...
- 如何查看linux系统下的各种日志文件 linux 系统日志的分析大全
日志分类: 1. 连接时间的日志 连接时间日志一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这 两个文件无法直接cat查看,并且该文件由系统自动更新,可以通过如下: ...
- 定义Foo() 函数,弹出对话框提示当前选中的是第几个单选框
function foo(){ var ele = document.getElementsByName("radioElement"); for(var i = 0;i<e ...
- Visual Studio 2013如何破解(密钥激活)
其实有个方法最简单,就是点击“帮助”,选择注册产品,点击打开页面右下边的“使用秘钥注册产品”,输入上述秘钥即可. 在输入密钥界面,输入密钥“BWG7X-J98B3-W34RT-33B3R-JVYW ...
- MySQL查看数据库大小、表大小和最后修改时间
查看数据库表基本信息. select * from information_schema.TABLES where information_schema.TABLES.TABLE_SCHEMA = ' ...