|
摘 要 有些时候,对于一个企业级移动应用程序,从服务器将信息推向移动设备,并且自动激活一个已安装的移动应用程序使其进行必要的处理是非常重要的。由短信服务(SMS)作为推信息的协议,使用push注册机制可以让使用Mobile Information Device Profile 2.0的JAVA微小版本应用程序拥有这一特征。
版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接 作者:Srijeeb Roy ;magic003(作者的blog:http://blog.matrix.org.cn/page/magic003) 原文:http://www.matrix.org.cn/resource/article/44/44449_Push+JAVA+Mobile.html 关键字:Push;JAVA;mobile
移动技术日渐流行。Java微小版本,或者叫Java ME(Sun的J2ME平台的新名字),是最流行的开发移动应用程序的技术之一。使用Java ME,我们可以在使用JVM或KVM的手持设备上运行多种无线应用程序。
Connected Limited Device Configuration (CLDC)被包含在Java ME中,它是面向那些只拥有有限资源,使用KVM的设备。同样,Mobile Information Device Profile(MIDP)也被包含在Java ME中,这是一个为了在手机上运行应用程序的基于CLDC的profile。运行在移动设备中的应用程序模块叫做MIDlet,是一个MIDP应用程序。一个MIDlet主要是一组有序运行的类,并且它们由运行在移动设备中的应用程序管理软件(AMS)所控制。
MIDP的最新版本(2.0)引入了很多新的特征来帮助开发者建立健壮的企业级应用程序。其中一个比较重要的特征就是push注册机制。在Java ME应用程序中,我们有时候需要从服务器推数据,并在设备上自动启动一个移动应用程序,而不需要由用户明确的启动设备。设想一种情形,当一个针对他/她的名字的工作条款被建立时,用户必须能自动得到通知,并且必须尽快地对此工作条款做出反应。Java ME的push注册机制能够很容易地将信息推向一个Java ME应用程序,并自动启动该程序。在这篇文章中,我将向你展示如何将push注册机制特征添加到你的移动应用程序中。
Push注册机制的行为可以被描述为如下三个步骤:
1.MIDlet在移动设备中注册一个连同协议名称的端口,如果任何信息到达指定的端口,并且使用相同的协议,那么AMS就将它转交给MIDlet。注册使用Java ME应用程序描述符(JAD)文件静态的完成。程序也能使用应用程序内置的API执行动态注册。
2. 从服务器,信息被发送到特定的移动设备,使用MIDlet应用程序注册监听的协议和端口。
3. 在信息被传递到移动设备后,AMS调用注册了监听此端口和协议的MIDlet应用程序。一旦信息被转交到MIDlet,那么处理信息就是此应用程序的责任了。典型的,根据信息的信息的内容,一个应用程序会选择打开一个屏幕,并允许用户与服务器进行一些事务。
在这篇文章的例子中,为了从服务器推信息,我们将使用一个GSM(移动通信全球系统)调制解调器。图1较高层次地描述了我们将在此文中实现的场景。
 图1. 从服务器push SMS消息到移动设备的高层场景
在jad文件中,每一个push注册条目都包含如下信息:MIDlet-Push-<n>: <ConnectionURL>, <MIDletClassName>, <AllowedSender>。
MIDlet-Push-<n>:push注册属性名称。MIDlet套件中可以包含多条push注册。<n>的数值从1开始,并且对于附加的条目必须使用连续的序数。第一个发现的缺失条目将中止列表。任何剩余的条目都会被忽略。 ConnectionURL:被Connector.open()使用的连接字符串。 MIDletClassName:负责连接的MIDlet。指定的MIDlet必须使用MIDlet-<n>记录在描述文件或jar文件的manifest中登记过。 AllowedSender:一个指定的过滤器, 它将限制哪些发送者能够能正当启动请求的MIDlet。
MIDP 2.0 规范定义了数据报和socket带内连接的语法。当其他规范为其他连接类型定义push 语义时,它们必须既定义过滤器域期望的语法,又定义连接URL字符串的期望格式。
在jad文件中,一个push注册的典型例子,使用socket连接,类似于如下: MIDlet-Push-1: socket://:77, com.sample.SampleApplication, *. 这个示例描述符条目在77端口处保存一个流套接字,并且允许所有的发送者。
从服务器推信息到移动设别会带来一些问题:如果我们想发送信息到一个在指定端口注册了监听流套接字的特定设备,我们必须知道那个移动电话的无线网络IP。因为在无线网络中,很多手机不使用始终连接环境(有时候,提供商不支持设备中网络中的静态IP),发送信息到设备是有问题的。如果我们不知道设备的无线IP,我们将不能使用套接字连接从服务器发送信息到设备。
短信服务(SMS)在这种情况下派上了用场。使用SMS,我们指定目标设备的电话号码;因此在这种情况下,我们不需要知道设备的IP地址。但是,使用SMS作为触发器同样会带来一些问题:因为MIDP2.0规范只定义了针对数据报和套接字带内连接的语法,而没有针对SMS连接的,所以不保证所有支持MIDP2.0的设备都能使用SMS作为触发器来进行push注册。但无线消息API(WMA1.1)-一个在MIDP上能支持SMS的的可选包-现在得到很多移动设备的支持,所以有更大的可能性,SMS作为push注册机制的触发器将得到很多设备的支持。对于这篇文章,我使用Nokia 6600移动电话,它是支持SMS作为push注册机制的触发器的。
另外,从服务器发送一条SMS消息到设备不是简单直接的,因为有很多途径存在。SMS服务提供商提供API(或者暴露服务URL),通过这些API你能从你的服务器端应用程序发送消息到你指定的移动电话上。但这种方法依赖于SMS服务提供商和它特殊的计划。可选的方式是使用一个GSM调制解调器,这样你需要使GSM调制解调器与你的服务器端应用程序进行交互。在这篇文章中,我将使用一个开源的产品,SMSLib for Java V1.0(原名jSMSEngine),它能使GSM调制解调器与你的Java服务器端程序进行交互。
另一个在此需要注意的要点是一条简单的SMS消息将不会激活MIDlet。我们必须发送SMS消息到MIDlet注册监听的特定的端口。因此被用来发送SMS消息的软件(或SMS服务提供商)必须能够将它发送到设备指定的端口。SMSLib for Java v1.0 支持这一功能。
当我们使用GSM [1] [2] [3] [4] [5] [6] [7] 下一页
|