managedquery为什么android xmpp可以接收英文的离线消息而不能接收中文的

managedquery  时间:2021-06-15  阅读:()

为什么android xmpp可以接收英文的离线消息而不能接收中文的

其实主要还是应用问题,掌握其应用就好办了、

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 Settings,点击Add ount,在Googlesign in中填入你的GMail 帐号和密码进行登录。

打开主菜单 Appliactions/APIs/App/Service XmppData Message Sender,在界面中输入你刚刚登录用的GMail 地址, 登录XMPP服务器使用GMail的账号

点击Sendmessage 按钮。

如果不出所料,你会看到如下一个提示:

恭喜你,你已经能够通过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@的GTalk 帐号(注:你在DevTools 中设置的lidahe.sun登录帐号必须和要发送的xing_ye帐号互为好友),再点击Send按钮试试看。

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

实现双向通信的GTalk客户端

刚刚我们实现了数据消息的互发,也实现了向GTalk 发送消息,那么能不能用接收数据消息的方式来接收文本消息呢?很遗憾,答案是否定的。

与数据消息不同,文本消息并不能发送Intent,因而也无法用IntentReciver 来接收(参见XmppDataMessageReceiver.java 源代码)。

但是,android提供了相应的处理方式。

如果你设置了XMPP登录帐号,当你启动模拟器时,Android 就开始接收发送到该帐号的消息了,它将收到的消息保存到名为IM数据库里。

同时,也会将该账号发送的消息也保存下来。

因此,Android 提供了一个名为Im的provider,通过它,你就可以查询保存在IM中的数据。

请看下面的代码:

/*来自:/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(.google.android.samples”, . google.android.samples.app.HelloWorld”); startActivity(i);

启动Demo 提供的Hello World 应用。

再次运行APIDemos,向本地登录XMPP的帐号发送一个数据消息

总结

通过将数据消息中的参数传递给Activity,不仅可以实现两台设备之间应用程序之间的交互, 还可以完全完成棋类游戏等一些点对点的应用。

所以XMPP无疑改变了标准之争的格局,提供了无限扩充的发展空间层

安徽BGP云服务器 1核 1G 5M 29元/月 香港云服务器 1核 1G 19元首月 麻花云

麻花云怎么样?麻花云公司成立于2007年,当前主打产品为安徽移动BGP线路,数据中心连入移动骨干网。提供5M,10M大带宽云主机,香港云服务器产品,数据中心为香港将军澳机房,香港宽频机房 cn2-GIA优质线路、采用HYPER-V,KVM虚拟技术架构一、麻花云官网点击直达麻花云官方网站合肥网联网络科技有限公司优惠码: 专属优惠码:F1B07B 享受85折优惠。最新活动 :双11 云上嗨购 香港云主...

香港CN2云服务器 1核 2G 35元/月 妮妮云

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款到网站余额,超过2天...

俄罗斯vps主机推荐,怎么样俄罗斯vps俄罗斯vps速度怎么样?

俄罗斯vps速度怎么样?俄罗斯vps云主机节点是欧洲十大节点之一,地处俄罗斯首都莫斯科,网络带宽辐射周边欧洲大陆,10G专线连通德国法兰克福、法国巴黎、意大利米兰等,向外连接全球。俄罗斯vps云主机速度快吗、延迟多少?由于俄罗斯数据中心出口带宽充足,俄罗斯vps云主机到全球各地的延迟、速度相对来说都不错。今天,云服务器网(yuntue.com)小编介绍一下俄罗斯vps速度及俄罗斯vps主机推荐!俄...

managedquery为你推荐
activity跳转Android中如何知道由哪个activity跳转到当前页面ata考试什么是计算机ATA考试?要详细答案!谢谢帮忙!!订房系统酒店PMS系统具体是什么爱短信官网求助。爱短信爱聊怎么用?动态图片格式怎么将GIF动态图片的格式变成JPG 动态效果不变?flash实例FLASH中实例是个什么概念,真心期待着!!!期待好心人,感恩!希望大家多讨论webservice框架用JAVA作APP后端,一般用什么web service?用什么restful框架webservice框架什么是webservice,什么情况下使用,如何使用comexception5种常见的Exception!java程序员招聘Java程序员,一般招聘都要求些啥
cn域名价格 什么是二级域名 ddos 香港托管 缓存服务器 qingyun 申请个人网站 爱奇艺vip免费领取 卡巴斯基破解版 Updog 买空间网 asp介绍 linux服务器系统 asp.net虚拟主机 内存 ssd 西安电信测速网 国内云主机 广州服务器数据恢复 qq空间登陆首页 更多