android客户端接收 openfire 服务器发送来的消息: 客户端代码如下: Java代码 package com.example.openfiretestimport org.jivesoftware.smack.Chatimport org.jivesoftware.smack.ChatManagerimport org.jivesoftware.smack.ChatManage。
android客户端接收 openfire 服务器发送来的消息:
客户端代码如下:
Java代码
package com.example.openfiretest
import org.jivesoftware.smack.Chat
import org.jivesoftware.smack.ChatManager
import org.jivesoftware.smack.ChatManagerListener
import org.jivesoftware.smack.ConnectionConfiguration
import org.jivesoftware.smack.MessageListener
import org.jivesoftware.smack.XMPPConnection
import org.jivesoftware.smack.packet.Message
import android.os.Bundle
import android.os.Handler
import android.app.Activity
import android.content.Intent
import android.view.Menu
import android.view.View
import android.view.View.OnClickListener
import android.view.Window
import android.widget.CheckBox
import android.widget.EditText
import android.widget.Toast
iOS无法做到这一点,因为IOS的应用程序并不知道自身是否被系统KILL掉,
比如,在好友KILL掉程序以后, 你依然无法知道他是否下线, 他的头像依然显示在线.
除非应用内有一个动作:退出登录, 并且用户通过点击"退出登录"来主动退出应用, 服务器才能得知他是否下线。
首先第一、与服务器建立好连接关键代码:127.0.0.1为服务器IP,5222为服务器端口号
[java] view plain copy print?
/**
* 连接服务器
*
* @return
*/
public boolean conServer() {
ConnectionConfiguration config = new ConnectionConfiguration(
127.0.0.1, 5222)
/** 是否启用安全验证 */
config.setSASLAuthenticationEnabled(false)
/** 是否启用调试 */
// config.setDebuggerEnabled(true)
/** 创建connection链接 */
try {
connection = new XMPPConnection(config)
/** 建立连接 */
connection.connect()
return true
} catch (XMPPException e) {
e.printStackTrace()
}
return false
}
第二、实现注册
关键代码:
以下代码注释都很清楚了,如有不懂的地方可以留言,这里就不多做解释了。
[java] view plain copy print?
/**
* 注册
*
* @param account 注册帐号
* @param password 注册密码
* @return 1、注册成功 0、服务器没有返回结果2、这个账号已经存在3、注册失败
*/
public String regist(String account, String password) {
if (connection == null)
return "0"
Registration reg = new Registration()
reg.setType(IQ.Type.SET)
reg.setTo(ClientConServer.connection.getServiceName())
reg.setUsername(account)// 注意这里createAccount注册时,参数是username,不是jid,是“@”前面的部分。
reg.setPassword(password)
reg.addAttribute("android", "geolo_createUser_android")// 这边addAttribute不能为空,否则出错。所以做个标志是android手机创建的吧!!!!!
PacketFilter filter = new AndFilter(new PacketIDFilter(
reg.getPacketID()), new PacketTypeFilter(IQ.class))
PacketCollector collector = ClientConServer.connection
.createPacketCollector(filter)
ClientConServer.connection.sendPacket(reg)
IQ result = (IQ) collector.nextResult(SmackConfiguration
.getPacketReplyTimeout())
// Stop queuing results
collector.cancel()// 停止请求results(是否成功的结果)
if (result == null) {
Log.e("RegistActivity", "No response from server.")
return "0"
} else if (result.getType() == IQ.Type.RESULT) {
return "1"
} else { // if (result.getType() == IQ.Type.ERROR)
if (result.getError().toString().equalsIgnoreCase("conflict(409)")) {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString())
return "2"
} else {
Log.e("RegistActivity", "IQ.Type.ERROR: "
+ result.getError().toString())
return "3"
}
}
}
第三、实现登录
关键代码: 代码很简单不做太多解释
[java] view plain copy print?
/**
* 登录
*
* @param a 登录帐号
* @param p 登录密码
* @return
*/
public boolean login(String a, String p) {
try {
if (connection == null)
return false
/** 登录 */
connection.login(a, p)
return true
} catch (Exception e) {
e.printStackTrace()
}
return false
}
第四、修改密码
关键代码:同样很简单
[java] view plain copy print?
/**
* 修改密码
* @param connection
* @return
*/
public static boolean changePassword(XMPPConnection connection,String pwd)
{
try {
connection.getAccountManager().changePassword(pwd)
return true
} catch (Exception e) {
return false
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)