簡介
對於 Java ME 平台,MIDP 定義了一個標準的 Java API 集合,此集合與聯網的受限設備配置 CLDC 一起提供了一個面向移動信息設備(如行動電話、雙向尋呼機和無線個人電腦
記事本)的完整 Java ME
應用程式運行環境。
功能
功能
·用戶輸入方法
·持久性數據存儲(使用簡單的面向記錄的
資料庫模型)
·
基於HTTP 1.1 的網路(使用 CLDC 通用連線
框架)
MIDP 1.0
MIDP 1.0提供了以下功能:
·用戶輸入方法
·持久性數據存儲(使用簡單的面向記錄的資料庫模型)
·
基於 HTTP 1.1 的網路(使用 CLDC 通用連線框架)
Java 規範請求 (Java Specification Request, JSR)-37 中定義了 MIDP 1.0 標準。
MIDP 2.0
JSR-118 中定義了 MIDP 2.0 標準。
MIDP 2.0 於 2002 年 11 月正式發布,MIDP 2.0 的推出在一定意義上增強了 Java ME 的功能,主要體現在如下幾個方面。
(1)支持操作圖像的像素,支持 Alpha 通道。
(2)增強型的
圖形用戶界面類 CustomItem,提高了高級界面類的表現力。
(3)Media 音頻子系統填補了 MIDP 1.0 不支持聲音播放的空白。
(4)Push 註冊機制和安全模型增強了對 MIDlet 的控制。
(5)遊戲開發包提高了遊戲開發的效率。
(6)聯網能力增強,可以支持 TCP/IP 甚至是 UDP 層的通信。
MIDP 2.1
1、 一個TextField或一個TextBox的最小尺寸(
存儲容量)不能少於1000個
字元。
2、 LCDUI布局指令必須被遵循 。
3、 LayoutManager.insert()方法的行為必須依照以下的描述:insert(Layer,int)
描述
Public void insert(javax.microedition.lcdui.game.Layer l,int index)
插入一個新的Layer
對象到LayoutManager在指定的索引值
描述:
插入一個已經被添加到這個LayoutManager的Layer
對象等於先使用LayoutManager.remove()方法刪除它,再用insert()方法添加到特定的索引。在LayoutManager.remove()方法被調用前,拋出IndexOutOfBoundsException的情況被檢查
參數:
int Index:在被添加的新的Layer
對象的索引值 。
異常拋出:NullPointerException:如果Layer
對象為null
IndexOutOfBoundsException:如果索引值小於0。如果索引值大於已經被添加到LayoutManager中的Layer
對象的數量且Layer對象不能被添加到這個LayoutManager中。如果索引值大於已經被添加到LayoutManager中的Layer
對象的數量且Layer對象已經被添加到這個LayoutManager中
4、 一個帶有item Command對象且表示
模式是Item.PLAIN的StringTtem對象必須總是被作為添加了Command
對象且表示模式是Item.HYPERLINK的StringTtem對象的方式顯示。
5、 許多的MIDP LUDUI圖像組件能包含文本(換句話說,一個字母數字
字元),那被顯示給用戶。這些組件的例子是List, TextBox , Alert , StringItem ,Form和Item。一個實現常常需要截斷這些可見的文本因為不能適合被給的UI組件的指定空間。在這種情況下,一個實現必須使用一個適當的可視化指示(例如一個省略符號)來指示用戶,文本被截斷。實際的符號或被用來顯示截斷的文本的符號以來於當前設備選擇的
區域設定。然而,可視化指示應該和用在設備本地的UI的指示一致。
6、 Canvas的觸摸事件必須被支持,如果基礎硬體支持這個特色。在這種情況下,Canvas.hasPointerEvents()方法應該總是返回true。
7、 Canvas的觸摸拖曳事件必須被支持,如果基礎硬體支持這個特色。在這種情況下,Canvas.hasPointerEvents()方法應該總是返回true。
8、 Canvas的重複事件必須被支持。在這種情況下,Canvas.hasRepeatEvents()方法應該總是返回true。
9、
雙緩衝圖像必須被支持。在這種情況下,Canvas.isDoubleBuffered()方法應該總是返回true。
10、 不同的文本輸入
模式的可用性(例如:預言輸入和僅僅是數字的輸入)應該和Java和本地的
應用程式相一致。這意味著,例如,如果預言輸入
文本模式在本地
應用程式中可用,那也應該在Java應用程式中可用。
11、 Image
對象的創建(不管格式)必須至少支持:尺寸等於(螢幕寬度)乘以(螢幕高度)乘以(以
位元組為單位的顏色深度)或262144比特(128×128×16比特=32KB),無論哪一個更大。注意,一個Image
對象的內在表現應該保持至少每個象素16位元組的顏色/透明度數據
12、 每一個包括在字元串值的通過System.getProperty(“microedition.commports”)方法返回的
串列連線埠名字必須可獲取通過javax.microedition.io.CommConnection接口
12、 在每個協定,AllowedSender域必須匹配適當的輸入事件的地址域。地址域的使用和語法和語意以來於協定。然而,地址和過濾器必須被比較通過精確的
字元串匹配,在那裡,字元串被一個接著一個字元的比較,字元需要正確地匹配通過兩個
通配符
13、 以下地
網路通信協定必須被支持,提供了以下Java ME接口的實現:javax.microedition.io.SockerConnection , javax.microedition.io.SecureConnection, javax.microedition.io.HttpsConnection
14、 javax.microedition.io.HttpsConnection和javax.microedition.io.SecureConnection必須支持SSLv3協定,其它的,例如TLS,WTLS也許被支持。
15、
應用程式描述符應該包含MIDlet-Permissions
16、 以下的JAD/manifest
檔案屬性被定義來支持指定預期的運行時執行環境:Runtime-Execution-Environment:這是一個可選的屬性,指出了
應用程式必須的運行時執行環境。這個屬性也許有值MIDP.CLDC.如果MIDlet suite不指定屬性,隱含的默認值是MIDP.CLDC。當值是MIDP.CLDC,實現的行為必須堅持在以下顯示的更多的細節描述。這個屬性值的附加值被在將來定義。手機實現必須支持這個屬性。當值是MIDP.CLDC,實現的行為必須堅持以下要求:1、支持API和API行為,以及基礎
虛擬機,必須順從CLDC1.1規範。2、手機實現也許二選一地使用Java ME的CDC規範。然而,如果CDC被用作基礎配置,運行在這個平台頂端的
應用程式必須看見一個語義學和功能上等於CLDC1.1平台的環境。CDC特定的API或者CDC特定行為必須不能被暴露給
應用程式或應用程式開發者。3、當一個
應用程式定義了Runtime-Execution-Environment屬性值,應用程式必須也定義一個CLDC平台在MicroEdition-Configuration屬性值中。4、如果一個
應用程式定義了不被實現支持的Runtime-Execution-Environment屬性值或MicroEdition-Configuration屬性值,應用程式不能被安裝。所有的手機實現必須支持MIDP.CLDC值對於Runtime-Execution-Environment屬性。
17、 用戶使用OTA下載安裝之後,實現必須提示用戶是否啟動MIDlet
18、 實現必須允許MIDlet創建最小為10個的
執行緒19、 支持至少512個屬性
20、 支持MIDlet suite包含1到5個MIDlet
21、 每個MIDlet suite的RMS至少保證64K的空間,在記憶體足夠的情況下
22、 每個MIDlet suite至少可以創建10個獨立記錄存儲
23、 MIDP的MMAPI的子集必須遵守MMAPI1.1或以後版本
24、 MicroEdition.profiles系統屬性不能包含相同profile的不同的版本
25、 Image
對象中ISO/IEC JPEG和JFIF被支持
26、 支持載入深度為1、2、4、8、16和32位的PNG格式
27、 TextBox和TextField的約束TextField.EMAILDDR和TextField.URL必須允許相同的
字元被輸入如同被允許輸入在TextField.ANY約束下
28、 適合的設備必須實現
基於時間的推註冊,如果沒有其它的安全機制基於時間的推註冊不需要被顯式的用戶的許可
事件處理機制
MIDP的事件處理機制同樣是採用回調的機制,可以參考AWT的事件處理原理。在MIDP中分高級事件處理和低級事件處理,前者主要是針對高級UI,而後者主要是這對Canvas這樣的低級UI的。首先介紹的是Command類,移動信息設備的輸入主要來自於手機的鍵盤,導航則主要是由按鈕來完成的,例如軟鍵和
導航鍵。Command類包裝了動作的信息,但是並沒有包括動作觸發後應該做什麼,這些是在CommanListener內實現的。Command的
構造器:
Command command = new Command("退出",Command.EXIT,1),
構造器的參數分別表示按鈕的標籤,按鈕的類型和優先權別。移動信息設備是根據後面兩個參數對按鈕進行布局的。
高級事件處理主要由兩個接口來實現,一個是CommandListener,一個是ItemStateListener。在CommandListener中定義了方法commandAction(Command cmd,Displayable disp),必須實現這個方法來完成事件處理,告訴
應用程式當在disp界面下如果cmd按鈕並按下的時候他應該去做什麼。ItemStateListener中定義了方法itemStateChanged(Item item),
應用程式通過他來得到在Form內的item內部狀態發生變化的事件。用戶在進行如下操作的時候都會觸發這樣的事件,調整互動性Guage、在TextField內輸入或者修改內容、修改DateField、改變ChoiceGroup的狀態。