《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > MIDP2.0新增特性

MIDP2.0新增特性

2008-12-19
作者:庄东

1.引言 

    无线Java技术是在移动通信领域内的J2ME技术,最近两年内迅速发展,截止到2003年2月,已经有21个生产厂家推出了100多种支持JAVA的手持设备。今年3月,CDMA领导厂商高通公司宣布,将在其CDMA的芯片中提供对J2ME的支持,其实现主要基于MIDP 2.0和CLDC1.0.4。今年6月,Sun和Intel达成协议,将联合开发支持英特尔XScale处理器的Java应用程序" title="应用程序">应用程序运行环境。在硬件中集成Java,将进一步促进Java在市场中的普及。根据ARC Group2002年六月的《无线JAVA报告》,“到 2007年, 几乎所有的手持设备都将提供对JAVA的支持”。 

    目前无线Java设备主要以手机为主,当前的实现主要基于CLDC1.0和MIDP1.0规范。MIDP2.0规范在去年11月推出,是未来无线Java技术的核心。今年6月,Sun与世界知名的手机厂商诺基亚、摩托罗拉、西门子和索尼—爱立信共同合作,开发适用于MIDP2.0技术标准的J2ME技术。预计合作的时间将为两个月,相信支持MIDP2.0的设备不久将推向市场。MIDP2.0作为下一代移动设备开发规范,增强了对音频、游戏、安全和Push注册的支持,并且对用户界面、网络连接" title="网络连接">网络连接的功能做了增强,同时将OTA应用程序下载包括到规范中来。本文对MIDP2.0的新增特性做了较详细的介绍。 

2.MIDP2.0的安全框架 

    MIDP运行在Java虚拟机之上,这使它可以解决一部分安全问题。然而对于移动信息设备,还有特定的安全问题,比如程序在用户不知道的情况下连接网络,会耗费用户的通信费用,还有程序可能会修改用户的本地资料,或把用户资料通过无线网络泄漏出去。为了解决这种情况MIDP2.0增加了安全框架。 

1) 有安全隐患的操作  

    对于有安全隐患的操作,MIDP2.0按功能把它们分为以下几组: 

    拨打电话:向外拨打电话的操作。 

    网络访问:与网络发生连接、访问网络数据的操作(例如 GSM、 GPRS等网络访问)。 

    收发消息:接受和发送消息的操作。(如短信服务) 

    程序自动激活:导致MIDlet suite自动激活的操作(如push技术、定时MIDlet等)。 

    本地连接:访问本地端口的操作(如COMM端口、红外口、蓝牙等)。 

    多媒体纪录:捕获静止图像、纪录视频或音频的操作。 

    读取用户数据:读取用户电话簿或其他文件中数据的操作。 

    修改用户数据:增加、删除或修改用户的电话簿和其他文件的操作。 

 

 

    当这些操作执行时,应由用户指定是否允许这些操作运行。比如用户通过http连接访问http://wireless.java.sun.com 网站时,在J2ME Wireless Toolkit2.0模拟器中运行时会出现左图所示的画面,提示用户该程序即将连接网站,询问用户是否进行该操作,如果用户同意,则继续进行连接网站的操作,如果用户不同意,则抛出安全异常,指出该程序不具备http网络访问的权利.如右图所示。
2) 权限许可证(Permission)。
    对于每一个有安全隐患的操作,都应有一个与之对应的权限许可证,当程序要进行这些操作时,AMS(应用程序管理软件)应根据许可证的类型做出反应。
    许可证主要分为以下两类:allowed 许可证 和 user 许可证。
    Allowed表示一直允许该操作。
    User需征求用户的许可,依据用户决定的持续时间分为三类。
    oneshot,用户决定只对本次有效,下次需要该功能许可时,继续提问用户。
    session,用户决定在此次程序运行期间内有效,程序重新启动后继续提问用户。
    blanket,用户的决定一直有效,直到该程序被卸载。
    当某项操作没有任何许可证时,必须拒绝该操作。
3) 保护域(Protection Domain)。
    程序中使用有安全隐患的操作时,应根据该操作的许可证做出反应,而一个操作有什么样的许可证,与程序的来源有很大关系,来自可信赖的开发者的程序自然会获得较多得许可证。这就涉及到保护域的问题。
    保护域实际上是一些许可证的集合,比如一个只允许http连接的保护域:
allow: javax.microedition.io.Connector.http
    在这个保护域中,所有其他的有安全隐患的操作都会被拒绝。
    下面是一个更为灵活的保护域,允许http连接,对于https和socket连接要征得用户同意,拒绝其他有安全隐患的操作
allow: javax.microedition.io.Connector.http
blanket: javax.microedition.io.Connector.https
blanket: javax.microedition.io.Connector.socket
    每个程序都会进入一个保护域,同一个保护域中的所有程序都有相同的安全策略。
对于保护域的实现问题,比如要定义多少保护域,每个保护域的内容如何,MIDP2.0规范并没有做强制性的规定,只是给了一个建议,具体如何实现由各个厂商自行决定。一个应用程序能够进入什么样的保护域,要看他来自何处,一个不明来历的程序肯定不会获得较多的权限。MIDP2.0安全框架提供了代码签名机制,开发者可以从权威认证机构获得密钥,然后对程序进行数字签名,设备下载之后可以对该签名进行验证,以确定该程序确实来自它所声称的地方,通过验证的程序会进入一些受信任的保护域。
3.MIDP2.0音频开发技术
    MIDP规范的目标是使开发出来的程序能在广泛的移动信息设备上" title="设备上">设备上运行,但MIDP1.0规范并不支持音频,如果开发有声音功能的程序,则必须使用设备厂商自己提供的API,这使得开发出来的程序失去了广泛的可移植性。MIDP2.0规范增加了对声音的支持,这使以后开发音频程序有了统一的规范。
    移动信息设备涉及的范围很广,这些设备的多" title="的多">的多媒体能力也有很大的差别,有些设备只能播放简单的曲调,有些设备却有很强的音频和视频渲染能力。由诺基亚领导的移动媒体API(MMAPI)专家组致力于为移动设备制定一组统一的多媒体API,以便开发出的多媒体程序能在各种设备上运行。MMAPI专家组的工作有以下两个成果:
? 制定出MMAPI规范(JSR—135),该规范包含了对音频和视频的支持,能够完全实现该规范的设备是一些高性能的设备,有较强的多媒体功能。诺基亚在2003年3月推出的3300手机就增加了对MMAPI的支持。
? 制定出MIDP2.0媒体API,鉴于MIDP规范面向大多数设备,MIDP2.0的媒体API实现了MMAPI的一个子集,只支持音频功能,并与MMAPI保持兼容。
    MIDP2.0媒体API与MMAPI有相同的体系结构。其中主要涉及三个基本概念:
? Manager
? Player
? Control
    Manager是获得系统音频功能的入口,它只包含一些静态方法,使用它来创建Player,查询系统支持那些协议和媒体类型,Manager还提供了一个播放简单曲调的方法。



    Player负责播放媒体内容,它由Manager创建,可以管理自己的生命周期,控制播放进度,提供可用的Control。
    Control是用于实现一个Player可能有的各种控制,如音量Control可以控制音量的大小。
    右图说明了Manager 、Player 和Control之间的关系:Manager创建Player,Player提供Control,Control用来控制Player。
    下面以我们PC机上的多媒体系统为例说明这种关系。
    Manager相当于PC机操作系统的一部分,用来管理各种播放软件,而Player就相当于这些播放软件,比如音频播放器" title="播放器">播放器用来播放音频,视频播放器用来播放视频,在这些播放器上有各种各样的控制按钮,这些按钮与Control相当,用来控制播放器,比如音量按钮控制播放器音量的大小。
    在PC机上,我们一般选择一个播放器播放媒体文件,然后用播放器上的控制按钮来控制播放过程。与之相对应,在移动设备上开发有音频功能的程序时,首先用Manager创建一个Player,然后从Player中得到相应的Control,用Control对Player进行控制。
4.MIDP2.0的游戏开发技术
    对J2ME游戏开发的支持可能是开发者企盼已久的, MIDP2.0新增了一个游戏包javax.microedition.lcdui.game,该包由以下五个类组成:GameCanvas、Layer 、LayerManager、Sprite、TiledLayer。MIDP2.0提供的游戏API使得游戏本身可以更充分的利用设备自身的图形处理功能。它的出现无疑大大简化了J2ME游戏的开发工作,同时也使得开发者可以更多地控制程序的图形处理性能。
1) MIDP2.0的游戏运行机制
    GameCanvas提供了基本的游戏运行机制,除了继承其父类Canvas的特性,它还提供了特定于游戏的下列功能:
查询键盘状态:
    在MIDP1.0中,为了获得用户的键盘输入,一般要使用系统的消息处理机制来处理键盘事件,但键盘事件的产生受系统线程调度的影响,因此不一定能反映用户当前的按键状态。GameCanvas提供了getKeyStates函数来查询键盘状态,该函数返回一个整数,这个整数的每一位代表一个健是否被按下,例如要查询LEFT键是否被按下,可用如下语句:
 int keyState = getKeyStates();
       if ((keyState & LEFT_KEY) != 0) {
          //do something
       }
    getKeyStates返回自上一次调用该函数以来有没有键被按下,并且清除按键状态,因此如果连续两次调用该函数,第二次会很好地反映当前键盘的状态。
    另外,为了提高性能,GameCanvas还可以阻止键盘事件的产生。用户玩游戏时,经常会频繁的按键,如果不阻止键盘事件的产生,系统会花费很多时间来发送键盘事件。
    GameCanvas构造函数为:GameCanvas(boolean suppressKeyEvents)
其中参数suppressKeyEvents表示是否要阻止键盘事件的产生,当该参数为true时,keyPressed, keyRepeated 和 keyReleased 事件将会受到阻止,这时可以通过查询键盘状态来确定用户的按健。
要注意的是,只有当GameCanvas正处于显示状态时,键盘事件才会受到阻止,并且受阻止的键仅限于与游戏有关的键,如UP、DOWN、FIRE等。其它键所产生的事件不会受到阻止。
    图像的绘制与显示:
    对每一个GameCanvas对象,系统都会为它开辟一个离屏图像缓冲区,要显示的图像先在该缓冲区内绘制,绘制完成后再复制到实际显示屏幕。这样做既提高效率,又可以避免频繁在实际屏幕绘图产生的闪烁现象。
    实际操作时,先用getGraphics返回一个操作离屏图像缓冲区的Graphics对象,使用该对象可缓冲区进行绘制。对缓冲区绘制完毕后使用flushGraphics函数将缓冲区复制到实际屏幕。
    有了上述功能,GameCanvas为游戏开发者提供了一个重要的机制:把整个游戏逻辑(包括图像显示和处理用户输入)封装在一个单线程的单循环内,这解决了在MIDP1.0中依赖系统的输入和显示线程来控制游戏问题,有利于提高游戏的稳定性和性能。
    典型的游戏循环如下:
Graphics g = getGraphics();//获得操作图像缓冲区的Graphics对象
while (true) {
  // 更新游戏状态 
 int keyState = getKeyStates();//查询键盘状态
  // 处理用户输入
  // 绘制图像缓冲区
  flushGraphics();//将缓冲区复制到实际屏幕
  //延时.
}
2) 创建游戏场景。
    GameCanvas提供了基本的游戏运行机制,游戏包的其它类方便了创建游戏场景。
    在一个游戏场景中,可能有各种角色和背景,MIDP2.0把每一个这样的角色或背景作为一个层(Layer)的概念,抽象类Layer定义了层的基本属性,如位置、大小、是否可见等。有两个类继承了Layer,分别是Sprite和TiledLayer。Sprite用来表示游戏中的动画角色,TiledLayer用于创建大的背景。当游戏中的Layer很多时,有必要对这些Layer进行统一管理。LayerManager类可以集中管理这些Layer。
5.MIDP2.0其它新增特性
    除了上面所述之外,MIDP2.0还在以下方面做了增强:
1) Push注册
    用户在Internet上浏览信息时,一般使用c/s(客户/服务器)架构,由客户机发出请求,服务器做出相应的相应,这种方式称为pull方式。与之相对应的是push方式,即服务器主动的向客户机发出信息。push技术非常适合无线网络的特点,无线网络的带宽比较低,无线传输的信息服务费也比较高,使用push使用户不必花费大量时间进行搜索,既有利于提高网络的利用效率,又可以减少用户的通信费用。push技术在无线商业上也有很大的应用价值,例如服务器可以根据用户的设定,将各种实时信息发送到用户的手机上,这些实时信息可以包括各种新闻、生活信息、广告等。
    MIDP2.0增加了对push注册的支持,push注册机制可以使MIDlet自动运行。运行方式有两种,一种基于定时技术,当到达特定时间时,程序就会运行;另一种基于网络,当设备收到网络推送的信息时,可以启动程序运行。设备的AMS维护着已注册的push列表,这些列表包括注册的网络连接和定时器以及与它们对应的MIDlet。当这些列表中的某个网络连接到来或是到达某个定时时间,AMS将根据列表激活相应的MIDlet。
2) OTA应用程序传输
    在PC机上开发者通常使用光盘发布软件, 移动设备没有软驱、光驱等数据交换设备,它主要通过无线网络进行数据传输,因此软件的发布也通过无线网络进行。网络运营商提供无线数据服务,开发者将自己开发的软件提交到服务器上,用户连接到服务器把软件下载到自己的设备上运行。为了规范这一过程,MIDP规范推出时同时推出了OTA (over-the-air    provisioning,无线服务提供方式)规范,MIDP1.0时,OTA作为一个推荐的行为,MIDP2.0对OTA做了增强,并把它作为规范的一部分,以后支持MIDP2.0的设备必须支持OTA,使得软件的发布有了统一的规范。
    OTA使移动信息设备上应用软件的下载、安装和删除能够通过无线网络自动进行,用户在这个过程中只需做很少的干预。一个OTA系统通常由用户设备、无线传输网络和提供服务的Web服务器组成。
    服务器的功能通常包括内容发布和管理、访问控制、程序安装、收费管理。一方面服务器使第三方软件开发者能将他们开发的软件发布到服务器上,另一方面使终端用户可以下载、安装这些软件,一旦软件安装成功,可以通过收费系统收取用户的费用,并根据下载数量来支付开发者的费用。在整个过程中,都有安全管理,这既包括对用户身份信息的认证,也包括对程序的鉴别,以确保该程序不用于非法目的。除了这些基本功能,有些服务器还为用户提供个性化服务,比如根据用户的设备特点和用户的设定为用户提供可用程序列表,确保这些程序都能在用户的设备上运行,当某一程序有新版本推出时通知用户等。
3) 网络连接增强
    在MIDP1.0中,只包含了对HTTP网络连接的支持,MIDP2.0增加了支持的连接类型,包括HTTPS、Socket、Datagram等。
4) 用户界面增强
    MIDP2.0对用户界面做了较多的增强,更方便开发者使用,例如对Form的布局管理,以字节数组的形式直接操纵Image图像等。

参考文献:
1. JSR-118 Mobile Information Device Profile 2.0(Final Release), http://jcp.org/aboutJava/communityprocess/final/jsr118/index.html,2002年11月
2. Jonathan Knudsen,What's New in MIDP 2.0,  http://wireless.java.sun.com/midp/articles ,2002年11月
3. Jonathan Knudsen,Understanding MIDP 2.0's Security Architecture,http://wireless.java.sun.com/midp/articles ,2003年2月
4. Enrique Ortiz,Introduction to OTA Application Provisioning,http://wireless.java.sun.com/midp/articles ,2002年11月
5. Enrique Ortiz,The MIDP 2.0 Push Registry,http://wireless.java.sun.com/midp/articles ,2003年1月
6. Jonathan Knudsen,Mobile Media API Overview http://wireless.java.sun.com/midp/articles ,2002年6月

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。