![[计算机]在android平台进行xmpp实验及分析.doc_第1页](http://file.renrendoc.com/FileRoot1/2019-1/5/e634bbe8-b798-435e-b559-2a04a0aa8f89/e634bbe8-b798-435e-b559-2a04a0aa8f891.gif)
![[计算机]在android平台进行xmpp实验及分析.doc_第2页](http://file.renrendoc.com/FileRoot1/2019-1/5/e634bbe8-b798-435e-b559-2a04a0aa8f89/e634bbe8-b798-435e-b559-2a04a0aa8f892.gif)
![[计算机]在android平台进行xmpp实验及分析.doc_第3页](http://file.renrendoc.com/FileRoot1/2019-1/5/e634bbe8-b798-435e-b559-2a04a0aa8f89/e634bbe8-b798-435e-b559-2a04a0aa8f893.gif)
![[计算机]在android平台进行xmpp实验及分析.doc_第4页](http://file.renrendoc.com/FileRoot1/2019-1/5/e634bbe8-b798-435e-b559-2a04a0aa8f89/e634bbe8-b798-435e-b559-2a04a0aa8f894.gif)
![[计算机]在android平台进行xmpp实验及分析.doc_第5页](http://file.renrendoc.com/FileRoot1/2019-1/5/e634bbe8-b798-435e-b559-2a04a0aa8f89/e634bbe8-b798-435e-b559-2a04a0aa8f895.gif)
全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在android平台进行xmpp实验及分析2008年12月26日9:17来源:Android中文社区我有话说(0)前言本文将用实验步骤的方式,讲述如何在一台PC上,在2个android模拟器之间,以及android模拟器和Gtalk PC客户端之间进行XMPP通讯。本文所用的代码样例,来源于一篇叫做“Totally *Unofficial* Android GTalk Client (Send/Receive XMPP Messages)”的文章,你在google上搜索“android gtalk xmpp”的关键字,第一个链接就是这篇文章,可是很可惜,在该文最初发表的网站上却找不到该文章,我是在费了半天劲,才在这里找到这篇文章和它附带的代码。该文讲述了如何在android平台上收发xmpp消息。我把它的IDEA project 转换成了完整的eclipse android 工程。并且给出了详细的实验步骤。为了试验方便,代码做了细微的改动。我会在后面提到。准备工作我的开发环境是基于android_sdk_windows_m3-rc37a和ADT0.3.3(android eclipse 插件)。这是目前最新的开发环境。如果你还在使用android_sdk_windows_m3-rc22a和低版本的ADT,最好都升级到最新版本。升级步骤详见/android/intro/upgrading.html然后,请把android sdk的tools目录置于系统path环境变量中。另外,为了完成这个实验,你还需要有2个gmail帐号。还需要需要安装Gtalk pc 客户端。安装好Gtalk pc client后,你用2个帐号分别登录,把2个帐号都相互加为好友。最后,最好把C:Documents and Settingsuser nameLocal SettingsApplication DataAndroid目录中把所有文件删除。这些文件存储着用户数据,把他们删除是为了排除旧数据干扰。比如在我的机器上,这个路径就是:C:Documents and SettingsAdministratorLocal SettingsApplication DataAndroid。忘了一点,该实验必须在联网环境下运行。 代码下载在这里下载完整的Eclipse android工程(eclipse工程名叫做xmpp,在android中的应用名叫做Gtalk Client)实验1(android to Gtalk)1.导入工程,在eclipse 环境中运行这个android工程。 2.在android模拟器中,先从Gtalk Client中退出。进入桌面。 3.导航到applications-Dev Tools - Xmpp Settings 4.点击Add Acount按钮,填入你的第一个gmail帐号(以下称为gmail1)和密码。如果认证通过,那么你的gmail1 就和这个模拟器绑定了.5. 确保stay connected to server这个可选项打上钩。完成后的样子如下:6. 启动你的Gtalk pc client,使用你的第二个帐号(以下称之为gmail2)登录。你可以看到你的gmail1好友处于忙碌状态。7. 在android 模拟器中,进入Gtalk Client应用。你可以在gmail2的gtalk客户端中看到,好友gmail1已经进入联机状态了.8. 在gmail1的android模拟器的第1个输入框中输入gmail2的gmail地址,然后点击setup按钮。你将看到gmail1和gmail2之间保存在当前模拟器实例上的聊天记录,当然,如果你是第一次运行,是没有聊天记录的。9. 然后在gmaill的android模拟器的第2个输入框中,输入发给gmail2的聊天信息,然后,点击send按钮。你会发现,gmail2的Gtalk pc client已经收到了来自gmail1的消息。10. 你也可以让gmail2通过gtalk pc client给gmail1的android 手机发送消息。好了,关于android和Gtalk pc client之间通讯的实验我们就到这里,接下来,我们将在一台pc上模拟器2个android手机进行xmpp通讯。实验2(android to android)我们的实验2是接着实验1下来的。11.让gmail2从Gtalk pc client上注销退出。12. 关闭gmail1的android模拟器。13. 在eclipes中启动xmpp项目,同时立即在在cmd窗口执行“emulator -skin QVGA-L”指令,启动第2个模拟器。14. 你将在eclipse中的device view界面看到2个模拟器。如下注:如果你在eclipse中看不到此界面,请点击window-show view-other-android/device15.在第2个模拟器启动过程中,执行以下指令,在第2个模拟器上安装Gtalk client应用。adb ?d install 注意:这里的 是指你在ADT中看到的第2个模拟器名称,一般是emulator-tcp-5557, 是指你的Gtalk client应用的apk文件绝对路径。该文件在你的工程目录的bin目录下。我这里的指令完整形式为: adb -d emulator-tcp-5557 install D:workspace_gphonexmppbinxmpp.apk16. 参照2-5步,在第2个模拟器tcp5557上绑定第2个gmail帐号gmail2. 17. 现在,2个模拟器已经配置好,可以和彼此setup,开始聊天了。你可以看到,gmail1中的列表中出现了历史聊天记录。 代码分析整个工程的代码非常简单。就一个Activity?GtalkClient。在该activtiy的onCreate方法中,我们把该activity的生命周期和xmpp的service进行绑定。mConnection这个对象相当于一个event handle hook.它所要做的就是定义当service启动和终止时,我们的程序应该做些什么。你可以看到,当xmpp服务启动时,我们所要做的事情就是利用绑定在模拟器上的gmail用户名和密码登录jabber服务器,也就是开始一个IXmppSession。同时通知服务器,该gmail用户已经联机了。接下来,我们先来看发送xmpp 消息的代码。在send按钮的事件处理代码中,发送消息的代码非常简单,首先简单校验一下接收者的JID(我们这里就是聊天对象的gmail帐号),然后使用mXmppSession的sendTextMessag方法,就把消息发送出去了。最后,我们来分析一下该程序的关键:接收xmpp消息。很意外,在setup按钮事件处理中,我们看到的代码居然是Sql查询代码。利用这个查询语句返回的一个Cursor,作为ListView的数据提供者。在原作者的代码中,代码是这么写的Cursor cursor = managedQuery(Im.Messages.CONTENT_URI, null, contact= + mRecipient.getText().toString() + , null, null); 而我这里,改成了:Cursor cursor = managedQuery(Im.Messages.CONTENT_URI, null,null, null, null); 也就是说他的Sql语句中包含了一个指定了contact 字段值的where字句,而我的Sql语句不带任何条件。但是不管怎么样,这只是个sql语句。那么为什么我们程序运行起来后,我们能在这个ListView中看到和好友的聊天记录呢?首先,我们要想到,这个ListView的数据来源就是这个Cursor。ListView的内容能随着我们的聊天记录动态更新,也就是意味着我们聊天的时候,该Cursor所对应的表数据在动态更新,那么这个数据库表在那里呢?其实,android把和xmpp相关的一切数据,存在一个叫im.db的数据库中,该数据库在那里呢,在你的userdata.img文件中。该文件的位置为C:Documents and Settingsuser nameLocal SettingsApplication DataAndroid。该文件是一个打包文件,里面存储着用户在android模拟器上存储的各种数据,包括配置数据,发布的应用等等。那么我们怎么知道这个img文件的目录结构呢,不用着急,ADT可以帮你。请看下图: 注:如果你在eclipse中看不到此界面,请点击window-show view-other-android/File Explorer 知道了这个im.db的位置,怎么知道这个im.db中有哪些表,表结构如何,有哪些数据呢?这时,我们就需要使用我们的adb sqlite3 shell了。在cmd窗口中,逐条执行以下指令:adb -d emulator-tcp-5555 shellsqlite3 /data/data/viders.im/databases/im.db.mode line 如果你想看看im.db数据库中有几个表,执行一下.tables指令,你将会看到该数据库中所有的表。接下来你可以使用select * from messages; Sql语句得到messages表的内容,正是我们的聊天记录。这里,各个字段的含义分别是:_id:主键。contact:对方的Jvider:jabber服务提供商,外键,在providers表中作为主键。account:本机的Jid帐号,外键,在accounts表中作为主键。body:消息内容date:消息发送时间incoming:消息流向是否是从contact到account。注意:这些字段和代码中Im.MessagesColumns.BODY等常量一一对应。当你使用Gtalk Client收发xmpp消息时,你会发现messges表是不停的更新
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【西安】陕西西安经济技术开发区管委会事业编制公办学校招聘175人笔试历年典型考题及考点剖析附带答案详解
- 罩生字教学课件
- 舞动的北京教学课件
- 美丽的彩带 教学课件
- 语法教学课件
- 转盘教学课件制作
- 敬人主题班会课件
- 教育收费政策课件
- 教育扶贫资助政策课件
- 文津图书奖活动方案
- 商场摊位购买合同协议
- 2024年泉州实验中学初一新生入学考试数学试卷
- 2025年第二届全国安康杯安全生产知识竞赛题库及答案(共190题)
- 护士法律法规知识培训课件
- DB11-T 2398-2025 水利工程巡视检查作业规范
- 2025年光伏行业上半年发展回顾与下半年形势展望
- 输血管理相关制度
- 老年性痴呆病人的护理与管理
- 无固定期限劳工合同通知书
- GB/T 45161-2024液氢容器用安全阀技术规范
- 《中医推拿按摩教程》课件
评论
0/150
提交评论