`
iaiai
  • 浏览: 2204364 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android xmpp开发 asmack获取离线在线添加好友消息 及 好友上线下线通知

 
阅读更多
直接上代码,看注释应该很好理解,只是提供一种思路,不对的请大神指正:
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的消息推送源码

    Android平台上的消息推送技术在移动应用开发中扮演着至关重要的角色,它能让应用程序在后台运行时接收服务器发送的通知或数据,提升用户体验。本教程将深入探讨如何基于XMPP(Extensible Messaging and Presence ...

    android聊天程序 XMPP-asmack

    8. **事件监听和推送**:为了实现即时通讯,应用需要持续监听服务器事件,如新消息、好友上线或离线等。Android的Service组件可以用来在后台运行这种长连接。 9. **安全性**:IM应用应确保通信的安全性,可能使用...

    xmpp android asmack 即时通讯

    ASMACK是专门为Android优化的轻量级JABBER/XMPP库,它提供了与JABBER服务器交互所需的API,包括连接、登录、发送和接收消息、管理联系人列表等。 **ASMACK库的使用** 1. **初始化**: 首先,你需要创建一个`...

    一个基于Android平台的XMPP开发包asmack的即时通讯的Demo

    - 使用Push服务(如Google Cloud Messaging或Firebase Cloud Messaging)来接收离线消息通知,提高用户体验。 - 对于大规模并发和大量消息处理,考虑使用后台服务和消息队列。 通过以上介绍,我们可以看到,基于...

    Android XMPP好友列表+聊天

    在Android平台上实现XMPP(Extensible Messaging and Presence Protocol)好友列表和聊天功能是一项常见的任务,尤其是在构建即时通讯应用时。XMPP是一种开放标准的实时通信协议,它基于XML,广泛用于实现聊天、视频...

    android应用源码(精)基于asmack开发的Android IM客户端源码

    7. **推送通知**:对于离线消息,应用可能需要集成Google的Firebase Cloud Messaging (FCM) 或者旧版的Google Cloud Messaging (GCM),以便在后台接收消息并显示推送通知。 8. **安全性**:考虑到隐私和安全,源码...

    Android XMPP例子(Openfire+asmack+spark)

    asmack允许Android应用与XMPP服务器进行通信,包括连接、登录、发送和接收消息、处理在线状态等。由于Android对XML解析的限制,asmack提供了适配Android环境的解决方案。 4. **Spark客户端**:Spark是一个桌面版的...

    android聊天程序(XMPP-asmack)

    应http://download.csdn.net/detail/longfei36/5927427 的广大码友要求,现上传源码 基于XMPP 的asmack 安卓即时通讯聊天程序源码 可以正常接收文件,聊天,添加好友,注册,表情等。 特此和广大码友分享

    AndroidXMPP-master

    开发者需要处理用户的上线、下线通知,以及添加、删除和管理联系人。 7. **Message Sending and Receiving**:通过XMPP,应用可以发送文本、富媒体(如图片、音频、视频)和其他类型的消息。开发者需要实现消息的...

    android的XMPP聊天demo

    在Android应用开发中,由于Java的兼容性,我们通常选择asmack作为XMPP的客户端库,因为它是一个为Java和Android优化的XMPP库。 1. **安装asmack库**:在Android项目中,我们需要将asmack库的jar文件添加到项目的...

    XMPP-asmack

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准协议,用于实时通信和信息交换,常用于构建即时消息和在线状态系统。Asmack是Android平台上对XMPP协议的一种实现,它允许开发者在...

    xmpp+android+openfire+asmack即时通讯客户端聊天

    3. **Android客户端开发**:在Android上开发XMPP客户端,通常会使用ASMACK库,它是Smack库的一个分支,专为Android优化,处理了Android系统特有的问题,如内存管理和线程模型。ASMACK提供了连接OpenFire服务器、建立...

    android XMPP openfire

    3. `RosterManager.java`:处理用户的好友列表,添加、删除好友,获取好友在线状态。 4. `GroupManager.java`:创建和管理群组,添加或移除群组成员。 注意点: - Android权限:确保在AndroidManifest.xml中添加...

    asmack xmpp开发jar包

    asmack xmpp开发jar包 6 0.8.2版

    安卓xmpp客户端AndroidStuido3编译过(基于asmack+openfire)

    基于xmpp+asmack+openfire的安卓客户端,界面仿QQ,实现好友添加,消息收发(支持文本,动态表情,图片,及位置类型) 原来的版本Android studio3无法编译通过。修改了一些配置和图片资源 原作者博客地址: ...

    Android基于Openfire服务器asmack开发的即时通讯示例

    总之,Android即时通讯应用基于Openfire和asmack库的开发涉及多个技术层面,包括服务器配置、客户端库的集成、XMPP协议的使用,以及各种功能的实现和优化。这个示例项目提供了一个起点,开发者可以在此基础上进行...

    android-xmpp-asmack-sample

    【Android XMPP Asmack 示例】是一个基于Java编程语言的项目,主要针对Android平台上的XMPP(Extensible Messaging and Presence Protocol)即时通讯实现。XMPP是一种开放标准的协议,广泛用于实时通讯,如聊天、...

    xmpp+android+openfire+asmack即时通讯

    - **离线消息**:当客户端离线时,Openfire服务器可以存储消息,待客户端重新上线时发送,Asmack提供了相应的API进行处理。 5. **视频通信扩展**: 虽然XMPP协议本身不直接支持视频通信,但可以通过扩展协议如...

    asmack-android

    标题中的"asmack-android"指的是一个专为Android平台设计的XMPP(Extensible Messaging and Presence Protocol)客户端库。XMPP是一种基于XML的即时通讯协议,广泛应用于即时消息、在线状态管理以及多用户聊天等场景...

    android应用源码(精)基于asmack开发的Android开源IM客户端-IT计算机-毕业设计.zip

    3. **ASMACK库**:熟悉ASMACK提供的API,如何创建连接、建立会话、发送和接收消息,以及处理各种事件,如用户上线、离线通知等。 4. **Android UI设计**:学习如何使用Android Studio创建用户界面,包括聊天窗口、...

Global site tag (gtag.js) - Google Analytics