《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > MIDP2.0新增特性

MIDP2.0新增特性

2008-12-19
作者:莊東

1.引言?

??? 無線Java技術(shù)是在移動(dòng)通信領(lǐng)域內(nèi)的J2ME技術(shù),最近兩年內(nèi)迅速發(fā)展,截止到2003年2月,已經(jīng)有21個(gè)生產(chǎn)廠家推出了100多種支持JAVA的手持設(shè)備。今年3月,CDMA領(lǐng)導(dǎo)廠商高通公司宣布,將在其CDMA的芯片中提供對(duì)J2ME的支持,其實(shí)現(xiàn)主要基于MIDP 2.0和CLDC1.0.4。今年6月,Sun和Intel達(dá)成協(xié)議,將聯(lián)合開發(fā)支持英特爾XScale處理器的Java應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序運(yùn)行環(huán)境。在硬件中集成Java,將進(jìn)一步促進(jìn)Java在市場(chǎng)中的普及。根據(jù)ARC Group2002年六月的《無線JAVA報(bào)告》,“到 2007年, 幾乎所有的手持設(shè)備都將提供對(duì)JAVA的支持”。?

??? 目前無線Java設(shè)備主要以手機(jī)為主,當(dāng)前的實(shí)現(xiàn)主要基于CLDC1.0和MIDP1.0規(guī)范。MIDP2.0規(guī)范在去年11月推出,是未來無線Java技術(shù)的核心。今年6月,Sun與世界知名的手機(jī)廠商諾基亞、摩托羅拉、西門子和索尼—愛立信共同合作,開發(fā)適用于MIDP2.0技術(shù)標(biāo)準(zhǔn)的J2ME技術(shù)。預(yù)計(jì)合作的時(shí)間將為兩個(gè)月,相信支持MIDP2.0的設(shè)備不久將推向市場(chǎng)。MIDP2.0作為下一代移動(dòng)設(shè)備開發(fā)規(guī)范,增強(qiáng)了對(duì)音頻、游戲、安全和Push注冊(cè)的支持,并且對(duì)用戶界面、網(wǎng)絡(luò)連接" title="網(wǎng)絡(luò)連接">網(wǎng)絡(luò)連接的功能做了增強(qiáng),同時(shí)將OTA應(yīng)用程序下載包括到規(guī)范中來。本文對(duì)MIDP2.0的新增特性做了較詳細(xì)的介紹。?

2.MIDP2.0的安全框架?

??? MIDP運(yùn)行在Java虛擬機(jī)之上,這使它可以解決一部分安全問題。然而對(duì)于移動(dòng)信息設(shè)備,還有特定的安全問題,比如程序在用戶不知道的情況下連接網(wǎng)絡(luò),會(huì)耗費(fèi)用戶的通信費(fèi)用,還有程序可能會(huì)修改用戶的本地資料,或把用戶資料通過無線網(wǎng)絡(luò)泄漏出去。為了解決這種情況MIDP2.0增加了安全框架。?

1)?有安全隱患的操作 ?

??? 對(duì)于有安全隱患的操作,MIDP2.0按功能把它們分為以下幾組:?

??? 撥打電話:向外撥打電話的操作。?

??? 網(wǎng)絡(luò)訪問:與網(wǎng)絡(luò)發(fā)生連接、訪問網(wǎng)絡(luò)數(shù)據(jù)的操作(例如 GSM、 GPRS等網(wǎng)絡(luò)訪問)。?

??? 收發(fā)消息:接受和發(fā)送消息的操作。(如短信服務(wù))?

??? 程序自動(dòng)激活:導(dǎo)致MIDlet suite自動(dòng)激活的操作(如push技術(shù)、定時(shí)MIDlet等)。?

??? 本地連接:訪問本地端口的操作(如COMM端口、紅外口、藍(lán)牙等)。?

??? 多媒體紀(jì)錄:捕獲靜止圖像、紀(jì)錄視頻或音頻的操作。?

??? 讀取用戶數(shù)據(jù):讀取用戶電話簿或其他文件中數(shù)據(jù)的操作。?

??? 修改用戶數(shù)據(jù):增加、刪除或修改用戶的電話簿和其他文件的操作。?

?

?

??? 當(dāng)這些操作執(zhí)行時(shí),應(yīng)由用戶指定是否允許這些操作運(yùn)行。比如用戶通過http連接訪問http://wireless.java.sun.com 網(wǎng)站時(shí),在J2ME Wireless Toolkit2.0模擬器中運(yùn)行時(shí)會(huì)出現(xiàn)左圖所示的畫面,提示用戶該程序即將連接網(wǎng)站,詢問用戶是否進(jìn)行該操作,如果用戶同意,則繼續(xù)進(jìn)行連接網(wǎng)站的操作,如果用戶不同意,則拋出安全異常,指出該程序不具備http網(wǎng)絡(luò)訪問的權(quán)利.如右圖所示。
2)?權(quán)限許可證(Permission)。
??? 對(duì)于每一個(gè)有安全隱患的操作,都應(yīng)有一個(gè)與之對(duì)應(yīng)的權(quán)限許可證,當(dāng)程序要進(jìn)行這些操作時(shí),AMS(應(yīng)用程序管理軟件)應(yīng)根據(jù)許可證的類型做出反應(yīng)。
??? 許可證主要分為以下兩類:allowed 許可證 和 user 許可證。
??? Allowed表示一直允許該操作。
??? User需征求用戶的許可,依據(jù)用戶決定的持續(xù)時(shí)間分為三類。
??? oneshot,用戶決定只對(duì)本次有效,下次需要該功能許可時(shí),繼續(xù)提問用戶。
??? session,用戶決定在此次程序運(yùn)行期間內(nèi)有效,程序重新啟動(dòng)后繼續(xù)提問用戶。
??? blanket,用戶的決定一直有效,直到該程序被卸載。
??? 當(dāng)某項(xiàng)操作沒有任何許可證時(shí),必須拒絕該操作。
3)?保護(hù)域(Protection Domain)。
??? 程序中使用有安全隱患的操作時(shí),應(yīng)根據(jù)該操作的許可證做出反應(yīng),而一個(gè)操作有什么樣的許可證,與程序的來源有很大關(guān)系,來自可信賴的開發(fā)者的程序自然會(huì)獲得較多得許可證。這就涉及到保護(hù)域的問題。
??? 保護(hù)域?qū)嶋H上是一些許可證的集合,比如一個(gè)只允許http連接的保護(hù)域:
allow: javax.microedition.io.Connector.http
??? 在這個(gè)保護(hù)域中,所有其他的有安全隱患的操作都會(huì)被拒絕。
??? 下面是一個(gè)更為靈活的保護(hù)域,允許http連接,對(duì)于https和socket連接要征得用戶同意,拒絕其他有安全隱患的操作
allow: javax.microedition.io.Connector.http
blanket: javax.microedition.io.Connector.https
blanket: javax.microedition.io.Connector.socket
??? 每個(gè)程序都會(huì)進(jìn)入一個(gè)保護(hù)域,同一個(gè)保護(hù)域中的所有程序都有相同的安全策略。
對(duì)于保護(hù)域的實(shí)現(xiàn)問題,比如要定義多少保護(hù)域,每個(gè)保護(hù)域的內(nèi)容如何,MIDP2.0規(guī)范并沒有做強(qiáng)制性的規(guī)定,只是給了一個(gè)建議,具體如何實(shí)現(xiàn)由各個(gè)廠商自行決定。一個(gè)應(yīng)用程序能夠進(jìn)入什么樣的保護(hù)域,要看他來自何處,一個(gè)不明來歷的程序肯定不會(huì)獲得較多的權(quán)限。MIDP2.0安全框架提供了代碼簽名機(jī)制,開發(fā)者可以從權(quán)威認(rèn)證機(jī)構(gòu)獲得密鑰,然后對(duì)程序進(jìn)行數(shù)字簽名,設(shè)備下載之后可以對(duì)該簽名進(jìn)行驗(yàn)證,以確定該程序確實(shí)來自它所聲稱的地方,通過驗(yàn)證的程序會(huì)進(jìn)入一些受信任的保護(hù)域。
3.MIDP2.0音頻開發(fā)技術(shù)
??? MIDP規(guī)范的目標(biāo)是使開發(fā)出來的程序能在廣泛的移動(dòng)信息設(shè)備上" title="設(shè)備上">設(shè)備上運(yùn)行,但MIDP1.0規(guī)范并不支持音頻,如果開發(fā)有聲音功能的程序,則必須使用設(shè)備廠商自己提供的API,這使得開發(fā)出來的程序失去了廣泛的可移植性。MIDP2.0規(guī)范增加了對(duì)聲音的支持,這使以后開發(fā)音頻程序有了統(tǒng)一的規(guī)范。
??? 移動(dòng)信息設(shè)備涉及的范圍很廣,這些設(shè)備的多" title="的多">的多媒體能力也有很大的差別,有些設(shè)備只能播放簡(jiǎn)單的曲調(diào),有些設(shè)備卻有很強(qiáng)的音頻和視頻渲染能力。由諾基亞領(lǐng)導(dǎo)的移動(dòng)媒體API(MMAPI)專家組致力于為移動(dòng)設(shè)備制定一組統(tǒng)一的多媒體API,以便開發(fā)出的多媒體程序能在各種設(shè)備上運(yùn)行。MMAPI專家組的工作有以下兩個(gè)成果:
??制定出MMAPI規(guī)范(JSR—135),該規(guī)范包含了對(duì)音頻和視頻的支持,能夠完全實(shí)現(xiàn)該規(guī)范的設(shè)備是一些高性能的設(shè)備,有較強(qiáng)的多媒體功能。諾基亞在2003年3月推出的3300手機(jī)就增加了對(duì)MMAPI的支持。
??制定出MIDP2.0媒體API,鑒于MIDP規(guī)范面向大多數(shù)設(shè)備,MIDP2.0的媒體API實(shí)現(xiàn)了MMAPI的一個(gè)子集,只支持音頻功能,并與MMAPI保持兼容。
??? MIDP2.0媒體API與MMAPI有相同的體系結(jié)構(gòu)。其中主要涉及三個(gè)基本概念:
??Manager
??Player
??Control
??? Manager是獲得系統(tǒng)音頻功能的入口,它只包含一些靜態(tài)方法,使用它來創(chuàng)建Player,查詢系統(tǒng)支持那些協(xié)議和媒體類型,Manager還提供了一個(gè)播放簡(jiǎn)單曲調(diào)的方法。



??? Player負(fù)責(zé)播放媒體內(nèi)容,它由Manager創(chuàng)建,可以管理自己的生命周期,控制播放進(jìn)度,提供可用的Control。
??? Control是用于實(shí)現(xiàn)一個(gè)Player可能有的各種控制,如音量Control可以控制音量的大小。
??? 右圖說明了Manager 、Player 和Control之間的關(guān)系:Manager創(chuàng)建Player,Player提供Control,Control用來控制Player。
??? 下面以我們PC機(jī)上的多媒體系統(tǒng)為例說明這種關(guān)系。
??? Manager相當(dāng)于PC機(jī)操作系統(tǒng)的一部分,用來管理各種播放軟件,而Player就相當(dāng)于這些播放軟件,比如音頻播放器" title="播放器">播放器用來播放音頻,視頻播放器用來播放視頻,在這些播放器上有各種各樣的控制按鈕,這些按鈕與Control相當(dāng),用來控制播放器,比如音量按鈕控制播放器音量的大小。
??? 在PC機(jī)上,我們一般選擇一個(gè)播放器播放媒體文件,然后用播放器上的控制按鈕來控制播放過程。與之相對(duì)應(yīng),在移動(dòng)設(shè)備上開發(fā)有音頻功能的程序時(shí),首先用Manager創(chuàng)建一個(gè)Player,然后從Player中得到相應(yīng)的Control,用Control對(duì)Player進(jìn)行控制。
4.MIDP2.0的游戲開發(fā)技術(shù)
??? 對(duì)J2ME游戲開發(fā)的支持可能是開發(fā)者企盼已久的, MIDP2.0新增了一個(gè)游戲包javax.microedition.lcdui.game,該包由以下五個(gè)類組成:GameCanvas、Layer 、LayerManager、Sprite、TiledLayer。MIDP2.0提供的游戲API使得游戲本身可以更充分的利用設(shè)備自身的圖形處理功能。它的出現(xiàn)無疑大大簡(jiǎn)化了J2ME游戲的開發(fā)工作,同時(shí)也使得開發(fā)者可以更多地控制程序的圖形處理性能。
1)?MIDP2.0的游戲運(yùn)行機(jī)制
??? GameCanvas提供了基本的游戲運(yùn)行機(jī)制,除了繼承其父類Canvas的特性,它還提供了特定于游戲的下列功能:
查詢鍵盤狀態(tài):
??? 在MIDP1.0中,為了獲得用戶的鍵盤輸入,一般要使用系統(tǒng)的消息處理機(jī)制來處理鍵盤事件,但鍵盤事件的產(chǎn)生受系統(tǒng)線程調(diào)度的影響,因此不一定能反映用戶當(dāng)前的按鍵狀態(tài)。GameCanvas提供了getKeyStates函數(shù)來查詢鍵盤狀態(tài),該函數(shù)返回一個(gè)整數(shù),這個(gè)整數(shù)的每一位代表一個(gè)健是否被按下,例如要查詢LEFT鍵是否被按下,可用如下語句:
?int keyState = getKeyStates();
????? ?if ((keyState & LEFT_KEY) != 0) {
????????? //do something
????? ?}
??? getKeyStates返回自上一次調(diào)用該函數(shù)以來有沒有鍵被按下,并且清除按鍵狀態(tài),因此如果連續(xù)兩次調(diào)用該函數(shù),第二次會(huì)很好地反映當(dāng)前鍵盤的狀態(tài)。
??? 另外,為了提高性能,GameCanvas還可以阻止鍵盤事件的產(chǎn)生。用戶玩游戲時(shí),經(jīng)常會(huì)頻繁的按鍵,如果不阻止鍵盤事件的產(chǎn)生,系統(tǒng)會(huì)花費(fèi)很多時(shí)間來發(fā)送鍵盤事件。
??? GameCanvas構(gòu)造函數(shù)為:GameCanvas(boolean suppressKeyEvents)
其中參數(shù)suppressKeyEvents表示是否要阻止鍵盤事件的產(chǎn)生,當(dāng)該參數(shù)為true時(shí),keyPressed, keyRepeated 和 keyReleased 事件將會(huì)受到阻止,這時(shí)可以通過查詢鍵盤狀態(tài)來確定用戶的按健。
要注意的是,只有當(dāng)GameCanvas正處于顯示狀態(tài)時(shí),鍵盤事件才會(huì)受到阻止,并且受阻止的鍵僅限于與游戲有關(guān)的鍵,如UP、DOWN、FIRE等。其它鍵所產(chǎn)生的事件不會(huì)受到阻止。
??? 圖像的繪制與顯示:
??? 對(duì)每一個(gè)GameCanvas對(duì)象,系統(tǒng)都會(huì)為它開辟一個(gè)離屏圖像緩沖區(qū),要顯示的圖像先在該緩沖區(qū)內(nèi)繪制,繪制完成后再復(fù)制到實(shí)際顯示屏幕。這樣做既提高效率,又可以避免頻繁在實(shí)際屏幕繪圖產(chǎn)生的閃爍現(xiàn)象。
??? 實(shí)際操作時(shí),先用getGraphics返回一個(gè)操作離屏圖像緩沖區(qū)的Graphics對(duì)象,使用該對(duì)象可緩沖區(qū)進(jìn)行繪制。對(duì)緩沖區(qū)繪制完畢后使用flushGraphics函數(shù)將緩沖區(qū)復(fù)制到實(shí)際屏幕。
??? 有了上述功能,GameCanvas為游戲開發(fā)者提供了一個(gè)重要的機(jī)制:把整個(gè)游戲邏輯(包括圖像顯示和處理用戶輸入)封裝在一個(gè)單線程的單循環(huán)內(nèi),這解決了在MIDP1.0中依賴系統(tǒng)的輸入和顯示線程來控制游戲問題,有利于提高游戲的穩(wěn)定性和性能。
??? 典型的游戲循環(huán)如下:
Graphics g = getGraphics();//獲得操作圖像緩沖區(qū)的Graphics對(duì)象
while (true) {
??// 更新游戲狀態(tài)?
?int keyState = getKeyStates();//查詢鍵盤狀態(tài)
? // 處理用戶輸入
? // 繪制圖像緩沖區(qū)
? flushGraphics();//將緩沖區(qū)復(fù)制到實(shí)際屏幕
? //延時(shí).
}
2)?創(chuàng)建游戲場(chǎng)景。
??? GameCanvas提供了基本的游戲運(yùn)行機(jī)制,游戲包的其它類方便了創(chuàng)建游戲場(chǎng)景。
??? 在一個(gè)游戲場(chǎng)景中,可能有各種角色和背景,MIDP2.0把每一個(gè)這樣的角色或背景作為一個(gè)層(Layer)的概念,抽象類Layer定義了層的基本屬性,如位置、大小、是否可見等。有兩個(gè)類繼承了Layer,分別是Sprite和TiledLayer。Sprite用來表示游戲中的動(dòng)畫角色,TiledLayer用于創(chuàng)建大的背景。當(dāng)游戲中的Layer很多時(shí),有必要對(duì)這些Layer進(jìn)行統(tǒng)一管理。LayerManager類可以集中管理這些Layer。
5.MIDP2.0其它新增特性
??? 除了上面所述之外,MIDP2.0還在以下方面做了增強(qiáng):
1)?Push注冊(cè)
??? 用戶在Internet上瀏覽信息時(shí),一般使用c/s(客戶/服務(wù)器)架構(gòu),由客戶機(jī)發(fā)出請(qǐng)求,服務(wù)器做出相應(yīng)的相應(yīng),這種方式稱為pull方式。與之相對(duì)應(yīng)的是push方式,即服務(wù)器主動(dòng)的向客戶機(jī)發(fā)出信息。push技術(shù)非常適合無線網(wǎng)絡(luò)的特點(diǎn),無線網(wǎng)絡(luò)的帶寬比較低,無線傳輸?shù)男畔⒎?wù)費(fèi)也比較高,使用push使用戶不必花費(fèi)大量時(shí)間進(jìn)行搜索,既有利于提高網(wǎng)絡(luò)的利用效率,又可以減少用戶的通信費(fèi)用。push技術(shù)在無線商業(yè)上也有很大的應(yīng)用價(jià)值,例如服務(wù)器可以根據(jù)用戶的設(shè)定,將各種實(shí)時(shí)信息發(fā)送到用戶的手機(jī)上,這些實(shí)時(shí)信息可以包括各種新聞、生活信息、廣告等。
??? MIDP2.0增加了對(duì)push注冊(cè)的支持,push注冊(cè)機(jī)制可以使MIDlet自動(dòng)運(yùn)行。運(yùn)行方式有兩種,一種基于定時(shí)技術(shù),當(dāng)?shù)竭_(dá)特定時(shí)間時(shí),程序就會(huì)運(yùn)行;另一種基于網(wǎng)絡(luò),當(dāng)設(shè)備收到網(wǎng)絡(luò)推送的信息時(shí),可以啟動(dòng)程序運(yùn)行。設(shè)備的AMS維護(hù)著已注冊(cè)的push列表,這些列表包括注冊(cè)的網(wǎng)絡(luò)連接和定時(shí)器以及與它們對(duì)應(yīng)的MIDlet。當(dāng)這些列表中的某個(gè)網(wǎng)絡(luò)連接到來或是到達(dá)某個(gè)定時(shí)時(shí)間,AMS將根據(jù)列表激活相應(yīng)的MIDlet。
2)?OTA應(yīng)用程序傳輸
??? 在PC機(jī)上開發(fā)者通常使用光盤發(fā)布軟件, 移動(dòng)設(shè)備沒有軟驅(qū)、光驅(qū)等數(shù)據(jù)交換設(shè)備,它主要通過無線網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)傳輸,因此軟件的發(fā)布也通過無線網(wǎng)絡(luò)進(jìn)行。網(wǎng)絡(luò)運(yùn)營(yíng)商提供無線數(shù)據(jù)服務(wù),開發(fā)者將自己開發(fā)的軟件提交到服務(wù)器上,用戶連接到服務(wù)器把軟件下載到自己的設(shè)備上運(yùn)行。為了規(guī)范這一過程,MIDP規(guī)范推出時(shí)同時(shí)推出了OTA (over-the-air??? provisioning,無線服務(wù)提供方式)規(guī)范,MIDP1.0時(shí),OTA作為一個(gè)推薦的行為,MIDP2.0對(duì)OTA做了增強(qiáng),并把它作為規(guī)范的一部分,以后支持MIDP2.0的設(shè)備必須支持OTA,使得軟件的發(fā)布有了統(tǒng)一的規(guī)范。
??? OTA使移動(dòng)信息設(shè)備上應(yīng)用軟件的下載、安裝和刪除能夠通過無線網(wǎng)絡(luò)自動(dòng)進(jìn)行,用戶在這個(gè)過程中只需做很少的干預(yù)。一個(gè)OTA系統(tǒng)通常由用戶設(shè)備、無線傳輸網(wǎng)絡(luò)和提供服務(wù)的Web服務(wù)器組成。
??? 服務(wù)器的功能通常包括內(nèi)容發(fā)布和管理、訪問控制、程序安裝、收費(fèi)管理。一方面服務(wù)器使第三方軟件開發(fā)者能將他們開發(fā)的軟件發(fā)布到服務(wù)器上,另一方面使終端用戶可以下載、安裝這些軟件,一旦軟件安裝成功,可以通過收費(fèi)系統(tǒng)收取用戶的費(fèi)用,并根據(jù)下載數(shù)量來支付開發(fā)者的費(fèi)用。在整個(gè)過程中,都有安全管理,這既包括對(duì)用戶身份信息的認(rèn)證,也包括對(duì)程序的鑒別,以確保該程序不用于非法目的。除了這些基本功能,有些服務(wù)器還為用戶提供個(gè)性化服務(wù),比如根據(jù)用戶的設(shè)備特點(diǎn)和用戶的設(shè)定為用戶提供可用程序列表,確保這些程序都能在用戶的設(shè)備上運(yùn)行,當(dāng)某一程序有新版本推出時(shí)通知用戶等。
3)?網(wǎng)絡(luò)連接增強(qiáng)
??? 在MIDP1.0中,只包含了對(duì)HTTP網(wǎng)絡(luò)連接的支持,MIDP2.0增加了支持的連接類型,包括HTTPS、Socket、Datagram等。
4)?用戶界面增強(qiáng)
??? MIDP2.0對(duì)用戶界面做了較多的增強(qiáng),更方便開發(fā)者使用,例如對(duì)Form的布局管理,以字節(jié)數(shù)組的形式直接操縱Image圖像等。

參考文獻(xiàn):
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月

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。