直接上代码,看注释应该很好理解,只是提供一种思路,不对的请大神指正:
public class PresenceService extends Service {
private _ConnectionControl cc = _ConnectionControl.getCC();//单例模式 保存了当前的链接
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("onDestroy", "PresenceService -- onDestroy");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("Presence", "PresenceService-----" + (cc.connection == null));
if (cc.connection != null && cc.connection.isConnected()
&& cc.connection.isAuthenticated()) {//已经认证的情况下,才能正确收到Presence包(也就是登陆)
final String loginuser = cc.connection.getUser().substring(0,
cc.connection.getUser().lastIndexOf("@"));
//理解为条件过滤器 过滤出Presence包
PacketFilter filter = new AndFilter(new PacketTypeFilter(
Presence.class));
PacketListener listener = new PacketListener() {
@Override
public void processPacket(Packet packet) {
Log.i("Presence", "PresenceService------" + packet.toXML());
//看API可知道 Presence是Packet的子类
if (packet instanceof Presence) {
Log.i("Presence", packet.toXML());
Presence presence = (Presence) packet;
//Presence还有很多方法,可查看API
String from = presence.getFrom();//发送方
String to = presence.getTo();//接收方
//Presence.Type有7中状态
if (presence.getType().equals(Presence.Type.subscribe)) {//好友申请
} else if (presence.getType().equals(
Presence.Type.subscribed)) {//同意添加好友
} else if (presence.getType().equals(
Presence.Type.unsubscribe)) {//拒绝添加好友 和 删除好友
} else if (presence.getType().equals(
Presence.Type.unsubscribed)) {//这个我没用到
} else if (presence.getType().equals(
Presence.Type.unavailable)) {//好友下线 要更新好友列表,可以在这收到包后,发广播到指定页面 更新列表
} else {//好友上线
}
}
}
};
cc.connection.addPacketListener(listener, filter);
}
return super.onStartCommand(intent, flags, startId);
}
}
分享到:
相关推荐
android基于xmpp,asmack的消息推送源码
xmpp android asmack 即时通讯 功能 聊天 包括文件传输
应http://download.csdn.net/detail/longfei36/5927427 的广大码友要求,现上传源码 基于XMPP 的asmack 安卓即时通讯聊天程序源码 可以正常接收文件,聊天,添加好友,注册,表情等。 特此和广大码友分享
一个基于Android平台的XMPP开发包asmack的即时通讯的Demo, 简单了文本和文件的发送和接收
可以正常运行的基于asmack的即时通讯程序 可登录,注册,收发表情,接收文件,添加分组,修改分组,添加好友 如有问题直接联系我邮箱longfei36@vip.qq.com
Android XMPP好友列表+聊天,服务器当前设置192.168.1.5
Android XMPP例子(Openfire+asmack+spark)
asmack xmpp开发jar包 6 0.8.2版
基于xmpp+asmack+openfire的安卓客户端,界面仿QQ,实现好友添加,消息收发(支持文本,动态表情,图片,及位置类型) 原来的版本Android studio3无法编译通过。修改了一些配置和图片资源 原作者博客地址: ...
#android-xmpp-asmack-sample
asmack-android-8-4.0.7jar 2015-02-20更新,现在asmack已经托管到github上,费了很长时间才找到,在这里分享给大家
android asmack xmpp API最新修改版,可收发文件 文件包含:xmpp.jar(android 2.2 以上的asmack) asmack-api(英文,但明了) 从官方下的最新办(2013-05) 已修改,可正常使用! 如果不能用可以骂我!
xmpp+android+openfire+asmack即时通讯客户端聊天 上网下载个openfire服务器安装后即可使用
bug较少的asmack版本,用于在android上使用xmpp
XMPP基于openfire asmack实现的即时通讯,包括连接,注册,登录消息发送,群聊等
基于asmack开发一个Android的客户端
asmack, 在Android上,一个用于XMPP客户端库的构建 aSmack ( 已经过时/已经过时) - Android上的Smack buildsystem不再需要:aSmack不再需要使用 Smack 4.1aSmack已经过时且已经过时。 以版本 4.1 Smack为起点,无需...
在android应用程序中使用xmpp协议的网络操作实例
android 电子文档 XMPP总结 文档
Android XMPP 即时通讯 包括服务器客户端