在BlackBerry設備上使用Java
應用程序控制
使用BlackBerry API BlackBerry Java 開發環境(簡稱JDE)的設計提供了一套完整的API和工具,來開發在BlackBerry設備上運行的Java應用程序。
BlackBerry設備包含了一個基於CLDC1.1以及MIDP的Java ME(Java Platform Micro Edition)運行時環境。BlackBerry API擴展提供了額外的功能,並且和BlackBerry集成得更緊密。
你可以在你的應用程序中使用CLDC/MIDP和BlackBerry API。爲了能讓你的應用程序在任何採用JTWI(Java Technology for Wireless Industry,無線領域的Java技術)的設備上運行,你僅需要使用CLDC和MIDP API來編寫標準的MIDP應用程序。
[if gte vml 1]>
BlackBerry APIBlackBerry API爲訪問BlackBerry特性提供了用戶界面,本地化,網絡,以及其他功能。
注:訪問某些特性,如高級的加密,同步,以及消息的額外API,是受限制的。爲了使用這些API,你必須收到專門來自Research In Motion的認證中心編寫的許可。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南第一卷:基礎第二卷:高級。
BlackBerry API 包
描述
net.rim.blackberry.api.browser
應用程序可以調用BlackBerry瀏覽器,爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級。
net.rim.blackberry.api.invoke
允許應用程序調用BlackBerry應用程序,如任務,消息,備忘錄以及電話。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級。
net.rim.blackberry.api.mail
定義了必要的功能來將內部的RIM消息系統對象組件轉化爲和Mail API兼容並可移植的對象。同時也提供了發送,接收,以及訪問消息的功能。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.mail.event
定義了消息事件以及監聽者(Listener)接口來管理郵件事件。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.menuitem
允許應用程序在BlackBerry的應用程序例如地址本,日曆以及消息中增加客戶定製的菜單項,爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.options
允許應用程序在BlackBerry設備的選項中增加選項條目。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.pdap
允許應用程序和BlackBerry個人信息管理(PIM)交互,PIM包括地址本,任務,日曆。MIDP包javax.microedition.pim提供了類似的功能。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.phone
提供了訪問電話應用程序的高級特性。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.blackberry.api.phone.phonelogs
提供了訪問電話呼叫歷史記錄的功能。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.device.api.bluetooth
允許BlackBerry應用程序在一個藍牙序列端口連接的基礎上與打開藍牙無線技術的設備進行通信。爲了得到更多信息,參看103頁的“使用藍牙序列端口連接”.
net.rim.device.api.browser.field
允許程序在界面上顯示瀏覽器的字段。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.device.api.browser.plugin
允許程序增加額外支持的MIME類型到BlackBerry瀏覽器上。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.device.api.collection
net.rim.device.api.collection.util
爲管理數據集合定義了接口和實用類。爲了得到更多信息,參看13頁的“集合”.
net.rim.device.api.compress
提供實用類來進行GZip和ZLib數據壓縮。[1]
net.rim.device.api.i18n
提供類來支持BlackBerry設備上應用程序的本地化。爲了得到更多信息,參看13頁的“本地化應用程序”.
net.rim.device.api.io
提供一個定製的BlackBerry類庫來管理數據的輸入和輸出。
net.rim.device.api.mime
提供與MIME編碼的數據流一起工作的類。
net.rim.device.api.notification
提供觸發事件的通知以及響應系統以及程序的事件的方法。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.device.api.servicebook
允許程序增加,刪除,以及訪問服務約定(Service Book)[2]的接口。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南 第二卷:高級
net.rim.device.api.system
提供訪問系統級的功能,包括鍵盤和滑輪的事件監聽者,圖像創建和支持,和應用程序控制。
net.rim.device.api.ui
提供增強的功能來控制BlackBerry用戶界面,包括屏幕和控件佈局管理,控件類型支持,焦點,滾動,以及改變監聽者。爲了得到更多信息,參看39頁的“用戶界面API”.
net.rim.device.api.ui.component
提供了創建UI程序的界面組件庫。爲了得到更多信息,參看39頁的“顯示用戶界面組件”。
net.rim.device.api.ui.container
提供創建UI程序的界面管理組件的庫。爲了得到更多信息,參看49頁的“管理用戶界面組件”。
net.rim.device.api.ui.text
提供類對文本字符串進行過濾,包含多種類型的數據,例如電話號碼或URL。
net.rim.device.api.util
提供實用的方法和接口,包含數組,哈希表,字符匹配。
CLDC APICLDC API 包
描述
java.io
提供數據流的系統輸入和輸出。
java.lang
提供Java編程語言基礎類。
java.lang.ref
提供引用對象類,它們支持一定程度上的垃圾回收。
java.util
包含集合類,時間,以及多樣的實用類。
javax.microedition.io
包含一般連接的類。
MIDP APIMIDP API 包
描述
javax.microedition.lcdui
包含MIDP 用戶界面API,它爲MIDP應用程序的用戶界面實現提供了一組特性。
javax.microedition.lcdui.game
包含了可以爲BlackBerry設備進行豐富遊戲內容開發的類。
javax.microedition.midlet
定義了MIDP應用程序以及應用程序和應用程序運行的環境之間的交互。
注:BlackBerry IDE可以在啓動時,使參數傳遞到一個BlackBerry CLDC應用程序中。
javax.microedition.pki
定義了用來驗證安全連接信息的證書。
javax.microedition.rms
爲MIDlet提供一種機制來存儲和取得持久性數據。
PDAP APIMIDP API 包
描述
javax.microedition.pim
.提供標準機制來訪問PIM信息。
在BlackBerry設備上使用Java編譯源代碼,打包爲.cod文件,並將.cod文件加載到BlackBerry設備上,通過虛擬機運行。
[img,13,13]file:///C:/DOCUME%7E1/CONFAC%7E1.ZHA/LOCALS%7E1/Temp/msohtml1/01/clip_image002.gif[/img] 注:.cod文件名控制在128字節。
如CLDC中描述的那樣,BlackBerry IDE使用一個分割的VM架構。爲了降低內存的數量以及BlackBerry設備需要的處理能力,部分類加載過程,稱爲預驗證,它在Java代碼加載到BlackBerry之前發生。在將源代碼打包爲.cod文件之前,自動驗證它。在類加載到BlackBerry設備時完成驗證的提示。
限制在CLDC1.1中描述的那樣BlackBerry虛擬機有以下限制:
- 沒有對象的析構(finalization)
- 沒有用戶類的加載
- 沒有反射,因此不支持RMI和Jini網絡技術。
- 沒有原生方法(Native method)
- 沒有Runtime.exec()執行外部的進程
持久數據存儲在閃存中的數據在BlackBerry重新設置之間持久保存。在BlackBerry設備上存儲數據可以採用以下二種方式中的一種:
- 使用MIDP記錄存儲
- 使用BlackBerry持久模型
網絡通信BlackBerry JDE根據MIDP2.0,實現了網絡通信。它提供多種連接選項,包括通過使用HTTP代理連接在公司防火牆背後安全連接的能力。
BlackBerry JDE提供了以下幾種連接類型:
- 流連接(StreamConnection接口,包括:
2. HTTPS連接(HttpsConnection接口)
3. Socket連接(SocketConnection接口)
4. 安全socket連接(SecureConnection接口)
5. 序列連接到BlackBerry設備的一個通信接口(CoomConnection接口)
- 數據報連接(DtagramConnection接口),包含
Javax.microedition.io.PushRegistry 類對BlackBerry設備保持了一些進入的連接。
流 BlackBerry JDE爲包含在CLDC java.io包裏的流提供了標準的接口和類。
MIME編碼
BlackBerry IDE提供了MIMEInputStream和MIMEOutputStream類來讀寫一個MIME編碼的數據流。
類
描述
MIMEInputStream
實現一個流來讀取一個MIME消息,然後根據MIME標準格式化和分解這個消息爲其部分
MIMEOutputStream
實現一個輸出流,這個流可以根據MIME標準格式化輸出爲其部分。本類不會完成實際的數據編碼,因此你必須在寫入它到本數據流治安編碼它。
壓縮
在net.rim.device.api.compress包裏,BlackBerry JDE提供類來讀取使用Zlib或者GZip格式壓縮的數據流。這些類的行爲如Java標準版本里的java.util.zip包裏對應的類一樣。
缺省的,壓縮是允許的,BlackBerry設備可以寫有效的GZip和Zlib文件爲這樣壓縮文件的內容。解壓縮同樣也是支持的。
集合BlackBerry IDE 提供了一組接口和實用類來管理BlackBerry設備上的集合。
net.rim.device.api.collection包包含了許多接口,這些接口爲某些特定類型數據類型多定義了種類型的集合,例如列表,數組以及映射。這些接口定義了與Java標準版本集合框架的list,set和map接口類似的功能。
在你自己的類中實現這些接口,或者使用在net.rim.device.api.collection.util包裏提供的使用類。
向量
標準的java.util.Vector實現了一個大小可以改變的對象數組。BlackBerry JDE也提供了合適的類,例如rim.device.api.util.IntVector和rim.device.api.util.ByteVector來對主要類型進行工作。這些類看起來和普通的Vector一樣,除了它們優化了在任何位置上插入的項。相反,如果你使用標準的大Vector作隨機的改變,大量的數據會在閃存和RAM移動。
列表
BlackBerry JDE在net.rim.device.api.collection.util包裏提供了一些類來管理元素的列表
類
描述
SortedReadableList 和
UnsortedReadableList
使用這些類來維護已排序的和未排序的元素列表。SortedReadableList類需要你使用一個比較對象來排序列表中的元素。增加到列表中的每一個元素必須被比較對象視爲有效的。
IntSortedReadableList 和LongSortedReadableList
使用這些類自動排序整形列表或與長整形關鍵字相關的元素。
BigSortedReadableList 和 BigUnsortedReadableList
使用這些類來存儲大的數據集合(大於10或者15K).這些類不會存儲數據到一個數組中,因此你可以對大數據集合更有效的做出隨意改變。
ReadableListCombiner
使用這個類合併2個或者更多的ReadableList對象並且將他們作爲一單個ReadableList來存儲。
ReadableListUtil
此類提供一些有用的方法如getAt()和getIndex()。我們可以使用此類得到只讀列表中的數
哈希表
除了CLDC提供的標準java.util.Hashtable 之外,BlackBerry JDE包含了特定的net.rim.device.api.collection.util.LongHashtableCollection類,這個類提供了使用長整形作爲關鍵字的哈希表集合。一個LongHashtableCollection 對象,寫操作作爲一個映射(使用一個關鍵字-元素對),讀操作作爲一個映射或者作爲一個集合(在集合裏作爲一個數組來得到數據)。
事件監聽者事件監聽者接口根據事件類型劃分。每個應用程序註冊來接收特定類型的事件。應用程序事件隊列然後調度事件到一個合適的監聽者。
應用程序可以實現合適的監聽者接口或者在各種Screen對象裏重寫監聽者方法。大多數應用程序實現了KeyListener 和TrackwheelListener 接口,而且註冊了監聽者來接收鍵盤和滑輪的事件。鍵盤和滑輪是用戶和應用程序交互的主要方式。
下列的事件監聽者放在 net.rim.device.api.system包中
監聽者接口
事件類型
AlertListener
實現接口來監聽alert事件
BluetoothSerialPortListener
實現接口來監聽藍牙序列端口事件,例如打開一個藍牙序列端口連接作爲服務器或者客戶端。
GlobalEventListener
實現接口來監聽可以廣播到所有應用程序的全局事件。
HolsterListener
實現接口來監聽套裝事件,例如BlackBerry設備從套裝中插入和移開。
IOPortListener
實現接口監聽I/O端口事件。
KeyListener
實現接口監聽鍵盤事件,例如用戶按住或釋放一個鍵。
RealTimeClockListener
實現本接口來監聽實時時鐘事件,例如時鐘更新。
SerialPortListener
實現此接口監聽序列化端口事件,例如對於一個已經和計算機序列端口連接的BlackBerry設備,一個在數據正在被髮送到序列化端口連接狀態中的改變。
SystemListener
實現此接口來監聽系統事件,例如電池狀態和電源的改變。
TrackwheelListener
實現本接口監聽滑輪事件,例如按住滑輪。
USBPortListener
實現本接口監聽USB端口事件,例如對於一個已經和計算機USB端口連接的BlackBerry設備,數據正被髮送到USB端口連接的狀態。
系統功能net.rim.device.api.system包的類提供了訪問Java VM和BlackBerry設備上系統資源的能力。
得到信號信息
RadioInfo提供了訪問信號狀態信息的能力。
得到設備信息
DeviceInfo類可以訪問下列BlackBerry設備的信息:
- 電池電源和狀態
- Blackerry設備號
- 空閒時間
- 平臺版本
當一個事件,例如一條新消息到來的時候,Alert類允許應用程序通知用戶。
監視內存使用情況
使用一個Memory類提供的靜態方法來得到VM內存使用統計信息。
Memory類很多實用方法返回一個MemoryStats對象。使用MemoryStats類提供的實用方法得到BlackBerry設備上內存和可用存儲空間的詳細信息。
日誌事件
EventLogger允許應用程序在持久存儲裏存儲事件日誌。BlackBerry設備維護事件隊列,以至當日誌滿時,會刪除最早的事件,並增加新的事件。用戶可以按住Alt+lglg鍵來查看BlackBerry設備的系統事件日誌。
使用工具BlackBerry JDE在net.rim.device.api.util包裏提供了一組實用工具,這些類裏的許多類提供了和Java標準版本里相似的功能
- Comparator接口定義了對象集合上的順序的方法。
- Arrays提供方法來操作數組,例如排序,查找,以及作爲列表來查看數組。
- BitSet 類維護bit的集合。
應用程序控制應用程序控制允許系統管理員操作以下動作:
- 控制內部連接(公司防火牆背後的連接)
- 控制外部連接
- 控制本地連接(序列和USB連接)
- 控制訪問鍵存儲(key store)
- 控制訪問特殊的API.
- 阻止第三方應用程序存在BlackBerry設備上。
受限制訪問的API, 類, 和方法
使用了下列受限的API,類,以及方法的應用程序可以加載到BlackBerry設備,但是如果他們訪問了一個沒有在應用程序控制下得到允許的API時,在運行時會拋出一個ControlledAccessException或者NoClassDefFoundError的異常。
類,方法或API
缺省值
應用程序菜單項API(net.rim.blackberry.api.menuitem)
允許
藍牙API (net.rim.device.api.bluetooth)
允許
Connector.open() (javax.microedition.io)
提示
注:內部和外部的連接由不同的應用程序控制策略來管理
DeviceKeyStore 類 (net.rim.device.api.crypto.keystore)
允許
EventInjector 類 (net.rim.device.api.system)
不允許
HTTP Filter API (net.rim.device.api.io.http)
不允許
Notification API (net.rim.device.api.notification)
允許
電API 和 呼叫API (用來調用電話應用程序) (net.rim.blackberry.api.phone 和net.rim.blackberry.api.invoke)
允許(缺省,用戶提示)
電話日誌API (net.rim.blackberry.api.phone.phonelogs)
允許(缺省,用戶提示)
PIM API (net.rim.blackberry.api.pdap)
允許
RuntimeStore 類 (net.rim.device.api.system)
允許
SerialPort 類 (net.rim.device.api.system)
允許
Session 類 (net.rim.blackberry.api.mail)
允許
StringPatternRepository 類 (net.rim.device.api.util)
允許
USBPort 類 (net.rim.device.api.system)
允許
[1] 也許有人會問,爲什麼BlackBerry需要壓縮數據,又在什麼地方用到呢?非常簡單,就是減小數據所佔用的空間,最好的一個例子是BES發送郵件,譯者注。
[2] 服務約定,Service Book,這是BlackBerry使用中一個非常重要的概念。功能就是你訂閱的服務,例如你訂閱了MMS的功能,它會在你BlackBerry手持設備上出現。譯者注。