将数据从服务器发送到Android设备的最佳方法

时间:2010-01-16 17:02:38

标签: android

我正在开发一款需要与服务器进行双向通信的Android应用。通过这种方式,我的意思是服务器或设备可以随时发送消息,消息之间有任意的时间量。将数据从设备发送到服务器是一种常见的,我认为很容易理解的任务,但我不确定从服务器到设备的相反方向的最佳方法是什么。

我认为让设备定期轮询服务器可能是一个坏主意,因为延迟和电池耗尽,但我愿意考虑这个选项。我目前的计划是通过电子邮件到SMS桥接器从服务器发送文本消息,并让我的应用程序运行服务来接收和处理这些消息。

我遇到的问题是,对于这种情况是否有任何最佳做法,如果使用短信有一些我没有考虑的缺点。为了这个问题,我想假设用户拥有无限制的文本数据计划,因此按文本付费不会成为问题。

1 个答案:

答案 0 :(得分:19)

这是XMPP擅长的。 :)

请参阅Smack Java库,或asmack获取Android自定义版本。

对于使用asmack进行长期双向通信的Android应用,请参阅BuddyDroid

编辑,回复以下评论:
在您的情况下,这种方法的优势在于您可以立即向客户端推送无限量的数据,而无需延迟(或无保证交付)SMS。 XMPP还为您提供连接安全性,压缩以及在其上层叠您自己的扩展的能力 此外 - 我不知道你的目标对象是否适用 - 这样你就不需要依赖用户拥有无限制的文本计划(当然你需要一个数据计划)。

如果您有兴趣并且正在寻找服务器(有几个开源服务器),请参阅ProsodyTigase

但是,重新阅读您的问题后,您似乎意味着活动率较低,因此,无论您的应用是什么,都可能不值得维护(登录,检测连接丢失,重新连接)XMPP会话。

最后..虽然您可以拦截Android设备上收到的短信,但 无法阻止它们显示在用户的短信收件箱中。因此,您可以处理传入的SMS,但是您无法告诉系统丢弃该消息。
我最近发现这不是真的:如果您在短信听取android:priority上定义intent-filter属性,则会收到“ordered broadcast”,允许您cancel传入的SMS广播在传播到其他应用程序之前,如SMS收件箱。请注意,这仅适用于Android 1.6及更高版本。