Android 中的XMPP 应用

Android平台的XMPP即时通讯应用开发 XMPP(Extensible Messaging and Presence Protocol,可扩展消息和出席协议)是一种开放标准的即时通讯协议。它起源于Jabber项目,由IETF定义,采用XML格式进行信息传输。XMPP的特点是支持分布式网络架构,允许服务器之间的互操作性,并支持各种扩展来增强功能。XMPP协议的可扩展性是其一大优势,它允许开发者通过定义新的命名空间(namespace)来扩展XMPP协议的功能。在Android平台上实现自定义扩展协议,需要对Smack库的API有深入了解。 阅读详情

原文来自:程序员杂志第一期,个人感觉这篇文章中的实例介绍的不错,在这里与大家分享,原文如下:

Extensible Messaging and Presence Protocol(XMPP)——可扩展消息与表示协议, 是由Jabber 开源社区贡献的一个基于XML的通信协议,它是被广泛应用的四大即时通信协议之一。Google 的即时通信软件GTalk 就是基于XMPP协议的。这次Google 推出Android,当然不会忘记XMPP,为它编写了相应的API 和Demo,现在就让我们从Google提供的Demo开始,一步步了解Android上的XMPP应用。( 下面基于模拟器演示)

启用XMPP

在API Demos 中, 我们很容易就找到了XMPP 的相关应用:XMPP Data Message Sender(APIDemos->App->Service)。但是,不要急于运行它,因为在使用XMPP应用之前,还要设置连接XMPP服务器账号。进入Dev Tools(待机界面的最后一个应用):

XMPP-DevTool

打开XMPP Settings,点击Add Account,在Googlesign in中填入你的GMail 帐号和密码进行登录。打开主菜单 Appliactions/APIs/App/Service XmppData Message Sender,在界面中输入你刚刚登录用的GMail 地址, 登录XMPP服务器使用GMail的账号

XMPP-Sign In

点击Sendmessage 按钮。如果不出所料,你会看到如下一个提示:
XMPP-Success

恭喜你,你已经能够通过xmpp发送数据消息了。

实际上这条信息是由XMPP Data Message Sender 发送给XMPP 服务器, 而客户端通过XmppDataMessage-Receiver(请参考API Demos 提供的源代码及相关文档)接收的。因为接收者是你自己,所以你会看到这条消息。如果使用两台电脑分别以不同的帐号登录XMPP服务器,两个模拟器之间就可以互发消息了(同一台电脑也可以实现,只是配置过程稍微有些繁琐)。

发送给GTalk

也许你会尝试将接收者改为一个已经登录的GTalk帐号,但是,无论你如何按Send,GTalk 也不会接收到任何信息,这是为什么?

原因是Android 中XMPP的信息分成两种形式:ataMessage( 数据消息) 和Text Message(文本消息),XMPPData Message Sender 发送的是数据消息,而GTalk 能接收的是文本消息,语言不通啊,所以无法交流。其实要Android 与GTalk 交流也不难,打开XmppData-MessageSender.java的源代码,修改下面的这行代码:
mXmppSession.sendDataMessage(username,getIntentToSend());
将其修改为:
mXmppSession.sendTextMessage(username, 0,”this is a test!”);

当你再次运行 XMPP Data Message Sende,就可以发送文本信息了。
登录xing_ye@gmail.com的GTalk 帐号(注:你在DevTools 中设置的lidahe.sun登录帐号必须和要发送的xing_ye帐号互为好友),再点击Send按钮试试看。
XMPP-SenMessage

GTalk已经收到了Android发出的消息
XMPP-ReceiveMessage

实现双向通信的GTalk客户端

刚刚我们实现了数据消息的互发,也实现了向GTalk 发送消息,那么能不能用接收数据消息的方式来接收文本消息呢?很遗憾,答案是否定的。与数据消息不同,文本消息并不能发送Intent,因而也无法用IntentReciver 来接收(参见XmppDataMessageReceiver.java 源代码)。但是,android提供了相应的处理方式。
如果你设置了XMPP登录帐号,当你启动模拟器时,Android 就开始接收发送到该帐号的消息了,它将收到的消息保存到名为IM数据库里。同时,也会将该账号发送的消息也保存下来。因此,Android 提供了一个名为Im的provider,通过它,你就可以查询保存在IM中的数据。请看下面的代码:

/*来自:http://davanum.wordpress.com/2007/11/23/
totally-unofficial-android-gtalk-clientsendreceive-xmpp-messages/*/
/* Run a query against CONTENT_URI = “content://im/messages”*/

Cursor cursor = managedQuery(Im.Messages.
CONTENT_URI, null, “contact=/’” + mRecipient.
getText().toString() + “/’”, null, null);
// Display the cursor results in a simple list
/* Note that the adapter is dyamic (picks up newentries automatically)*/
ListAdapter adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor, // Give the cursor to the list adatper
new String[]{Im.MessagesColumns.BODY},
new int[]{android.R.id.text1});
this.mListMessages.setAdapter(adapter);

访问上面的链接可以得到全部的代码。

数据消息的应用

文本消息可以用来实现IM客户端,那么数据消息有什么作用呢?事实上,数据消息可以成为应用程序之间沟通的纽带。通过 demo 我们已经看到, 运行在后台的XmppDataMessageReceiver 能够接收来自其他设备的消息, 但是demo 中只是以通知的形式告知用户, 并没有附带任何实际的应用。但是, 只要对demo 进行一些小小的改动,就能立即显现出数据消息的作用。在XmppDataMessageReceiver 中不能直接启动一个应用,但是可以启动一个服务。而通过这个服务作为中转,就可以把数据消息跟特定的应用程序关联。

同样借助API Demos 提供的例程,让我们看看如何实现这个操作。首先修改XmppDataMessageReceiver 的onRecieveIntent,在显示通知的后面增加这样一行代码:context.startService(new Intent(context,LocalService.class), null);
其中的LocalService同样是API Demos提供的,它能够创建一个服务例程。接着修改LocalService 的onCreate(),在最后增加:

Intent i = new Intent(Intent.MAIN_ACTION);
i.addLaunchFlags(Intent.NEW_TASK_LAUNCH);
i.setClassName(“com.google.android.samples”, “com.
google.android.samples.app.HelloWorld”);
startActivity(i);

启动Demo 提供的Hello World 应用。再次运行APIDemos,向本地登录XMPP的帐号发送一个数据消息,你会看到:

XMPP-GotMessage

总结

通过将数据消息中的参数传递给Activity,不仅可以实现两台设备之间应用程序之间的交互, 还可以完全完成棋类游戏等一些点对点的应用。所以XMPP无疑改变了标准之争的格局,提供了无限扩充的发展空间层。希望xmpp服务的基础上开发更多富有创新的应用软件。感谢Androidcn社区的地狱男爵(李大和)对本文成稿的贡献。

 

转自:http://www.moandroid.com/?p=1370

基于XMPP协议的Android即时通信应用源码深度解析与更新 XMPP(Extensible Messaging and Presence Protocol)是一种开放的即时通信和在线状态协议。它允许任何人实现实时的、基于XML的消息交换和可扩展的存在信息。XMPP在即时通信领域中有着广泛的应用,尤其在开源社区中,它是构建可扩展、分布式通信系统的基础技术。Android开发工具链主要由Android Studio、Gradle构建系统、Android SDK以及模拟器/真实设备组成。 阅读详情

相关推荐

Android即时通讯应用开发:基于XMPP协议项目实战

本文还有配套的精品资源,点击获取 简介:本项目涉及在Android平台上利用XMPP即时通讯协议构建聊天应用。XMPP是一种开放标准,支持多种实时通讯场景。我们将深入探索如何使用Smack库来实现用户连接、消息发送接收、群组管理等功能,并讨论如何设计UI和处理导航,最终构建一个具备聊天、群聊及用户头像展示等功能的应用。 1. XMPP协议基础及应用 1.1 ...

weixin_42594427的博客 2314

XMPP详解四

XMPP协议学习笔记四(Openfire服务器启动过程) 在上篇文章中我们成功部署了openfire的源码,这一篇我们来初步了解一下openfire的项目结构。 概述     Openfire最主要的功能是实现XMPP服务器,简单来说,openfire为我们提供一个固定的地址,我们只需要向openfire服务器发送标准的XMPP信息(即XML文件流),那么openfi

lmpt90的专栏 871

Openfire与XMPP协议在Android即时通讯中的应用解析

Openfire是一个开源的即时消息通信服务器,它基于XMPP(可扩展消息和出席协议)标准,广泛应用于企业级的即时通讯解决方案。本章节将为读者提供Openfire的基本概念,它的安装和配置步骤,以及如何实现一个基本的即时通讯服务器环境。Openfire是一个用Java编写的轻量级服务器,它允许用户创建自己的即时消息服务,实现消息的即时传递、在线状态呈现以及群组交流功能。它提供了良好的用户管理界面和多种插件支持,可以很好地集成到企业现有的信息系统中。

weixin_42591908的博客 344

Android XMPP Service (Google Talk) + Google Map == Follow Me

Android XMPP Service (Google Talk) + Google Map == Follow Me分類:Mobile2007/11/27 10:22<br /><br />我在 Android SDK 上寫了一個簡單的程式 (姑且把她叫 Follow Me),來測試 Android 的 XMPP Services (Google Talk) & Google Map 整合,我希望可以透過 Google Talk,來追蹤 Contact Lists 現在的位置及互相通訊。例

尘埃落定 1957

构建基于XMPP协议的Android语音即时通讯应用

XMPP是一种基于XML的协议,最初用于聊天系统,现在则广泛应用于即时通讯和实时数据交换。它支持基本的即时通讯功能,包括即时消息传输、状态信息(如在线、忙碌)以及消息的推送。由于其开放性和灵活性,开发者可以定制和扩展XMPP来满足特定的业务需求。

weixin_28888459的博客 1072

Android即时通信应用项目:XMPP协议实战

即时通信技术已经成为现代沟通不可或缺的一部分,它的出现极大地改变了人们的生活和工作方式。通过网络实时交换文本消息是即时通信技术的基本功能,但它所涵盖的技术范畴远远不止于此。本章将带领读者了解即时通信技术的发展历程,技术架构,以及在市场中的应用情况,为深入探讨即时通信技术的各个方面打下坚实基础。XML流是XMPP协议中信息交换的基础。它定义了消息、存在状态、订阅请求等不同类型的数据包(Packet)如何被封装和传输。消息类型和状态信息都用XML格式进行编码,并通过 TCP 连接传输。

weixin_29496633的博客 1279

编译android 之后生成的 img 文件介绍

   在编译android 之后,会生成几个image 文件, 这些文件是:    1。 ramdisk.img    :   一个分区影像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。   2。system

free2o的专栏 7748

Android平台基于XMPP协议的即时通讯应用开发实战

即时通讯(Instant Messaging,IM)是指两个或多个用户之间通过网络实时交换文本、语音、图片等信息的技术。在移动互联网高速发展的背景下,IM功能已成为社交、办公、电商等各类App的核心模块之一。Android平台因其开放性与广泛的设备覆盖,成为IM应用开发的重要战场。目前主流的IM协议包括XMPP(可扩展消息与存在协议)、MQTT(消息队列遥测传输协议)和WebSocket。它们各有特点:XMPP以结构化、可扩展著称;MQTT适合低带宽、高可靠场景;

weixin_42612804的博客 902

2024年Web前端最全Android进阶(十一)Android系统架构讲解_sse技术android,2024最新腾讯前端面试分享

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】世界上只有一种真正的英雄主义就是在认清生活真相之后仍然热爱它i)Location Manager(位置管理器)提供位置服务j)XMPP Service(XMPP服务)提供Google Talk服务3)系统运行库层从图中可以看出,系统运行库层可以分成两部分,分别是系统库和Android运行时,分别介绍如下:a)系统库系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。

2401_84433974的博客 846

构建Android仿QQ即时通讯应用:OpenDIRE与XMPP协议实战指南

OpenDIRE(Open Distributed Instant Messaging and Realtime Engagement)是一个开源的即时通讯服务器,提供了一个基于XMPP协议的分布式即时通讯解决方案。它由一组精心设计的服务器和客户端组件组成,能够支持大规模的实时消息传递和网络通信。可扩展消息和出席协议(Extensible Messaging and Presence Protocol,XMPP)是一个开放的基于XML的协议,用于即时消息(IM)、在线状态呈现和轻量级多方实时通信。

weixin_35935514的博客 1186

基于Xmpp协议的即时通讯社交软件(客户端+服务端)

开源一个自己去年写的基于Xmpp协议的即时通讯社交软件(客户端+服务端) 本项目仅供参考,对于正在学习Xmpp以及javaweb后台的同学,可以看一下。 做这个项目纯属个人兴趣爱好,所以即时通讯做的不是很深,只是简单的实现了功能。(查询,添加好友,聊天等) 另外要提的一点,源生的openfire很好,但并不能满足所有业务,所以需要对openfire进行二次开发。 如果你觉得还不错,可以给个star,支持下,谢谢了!

Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现【4】监听别人的添加好友申请与好友删除的设计

先介绍一个方法类,主要是添加好友等方法。 public class XmppService{ /** * 删除当前用户 * @param connection * @return */ public static boolean deleteAccount(XMPPConnection connection) {

yuanqihesheng的专栏 6143

在Android使用XMPP详细解说

在Android使用XMPP详细解说

android基于xmpp的即时通讯应用

xmpp是一个通信协议。因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议。Android上最常用的组合asmack +openfire。Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfi

SunnyCoffee Blog 2万+

关于影响力最大化问题中贪心算法的一些理解

在影响力最大化问题中(Influence Maximization,以下简称IM),贪心算法是最早提出的一种解决方法,并且一直沿用至今。它基于IM问题所具有的单调性(Monotonicity)和子模性(Submodularity)使用一种Hill Climbing策略,不断使用Monte Carlo模拟来寻找在当前情况下的具有最大传播范围的节点,添加至种子集合,得到最终结果,算法伪代码如下所示: 这里算法1其实并没有使用MonteCarlo模拟,而只是使用了贪心的策略...

nianjuan1990的专栏 2851

Dataset - DeepFashion 服装数据集

Dataset - DeepFashion 服装数据集 [Dataset - DeepFashion] [Project - DeepFashion] 1. 服装类别和属性预测集 [Category - Attribute 下载] [百度网盘] 289,222 张服装图片 clothes images; 50 个服装类别 clothing categories 1,000 ...

长风破浪会有时,直挂云帆济沧海 2万+

android asmack基于xmpp的即时通讯应用

xmpp是一个通信协议。因为这是个开放的协议,为了节俭开发成本,很多即时应用都采用了这个协议。Android上最常用的组合asmack +openfire。Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操作。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通讯应用的话,服务器端已经开发好了,就是openfi

383

手机相机基础技术解析:从硬件到算法的全面指南

手机相机的成像过程可简化为的链路,其核心硬件包括 镜头、CMOS传感器、ISP(图像信号处理器) 以及配套的软件算法。

weixin_44239603的博客 2447
上一篇: G5 获取ROOT权限
下一篇: Android修改Eclipse 中的Default debug keystore路径
happy hell
博客等级 码龄23年 136粉丝 179原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值