第1章BlackBerry API
使用 BlackBerry API 在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手持設備軟件組件
爲了查看API 參考。點擊任務欄的開始>程序>Research In Motion>BlackBerry JDE 4.1.0>API Java Doc Reference
BlackBerry API
BlackBerry API爲訪問BlackBerry特性提供了用戶界面,本地化,網絡,以及其他功能。
注:訪問某些特性,如高級的加密,同步,以及消息的額外API,是受限制的。爲了使用這些API,你必須收到專門來自Research In Motion的認證中心編寫的許可。爲了得到更多信息,參看 BlackBerry 應用程序開發者指南第一卷:基礎 第二卷:高級。
CLDC API
CLDC API 包
|
描述
|
java.io |
提供數據流的系統輸入和輸出。 |
java.lang |
提供Java編程語言基礎類。 |
java.lang.ref |
提供引用對象類,它們支持一定程度上的垃圾回收。 |
java.util |
包含集合類,時間,以及多樣的實用類。 |
javax.microedition.io |
包含一般連接的類。 |
MIDP API
MIDP 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 API
MIDP API 包
|
描述
|
javax.microedition.pim |
.提供標準機制來訪問PIM信息。 |
在BlackBerry設備上使用Java
編譯源代碼,打包爲.cod文件,並將.cod文件加載到BlackBerry設備上,通過虛擬機運行。
注:.cod文件名控制在128字節。
如CLDC中描述的那樣,BlackBerry IDE使用一個分割的VM架構。爲了降低內存的數量以及BlackBerry設備需要的處理能力,部分類加載過程,稱爲預驗證,它在Java代碼加載到BlackBerry之前發生。在將源代碼打包爲.cod文件之前,自動驗證它。在類加載到BlackBerry設備時完成驗證的提示。
限制
在CLDC1.1中描述的那樣BlackBerry虛擬機有以下限制:
- 沒有對象的析構(finalization)
- 沒有用戶類的加載
- 沒有反射,因此不支持RMI和Jini網絡技術。
- 沒有原生方法(Native method)
- 沒有Runtime.exec()執行外部的進程
多線程
BlackBerry Java環境提供一個真正的多線程環境來運行應用程序。這個環境允許多個應用程序同時運行,允許事件廣播到多個應用程序,以及長操作和監聽線程在背後運行。
持久數據
存儲在閃存中的數據在BlackBerry重新設置之間持久保存。在BlackBerry設備上存儲數據可以採用以下二種方式中的一種:
- 使用MIDP記錄存儲
- 使用BlackBerry持久模型
爲了得到關於使用BlackBerry API存儲持久數據的更多信息,參看BlackBerry應用程序開發者指南第一卷:基礎 第二卷:高級。
網絡通信
BlackBerry JDE根據MIDP2.0,實現了網絡通信。它提供多種連接選項,包括通過使用HTTP代理連接在公司防火牆背後安全連接的能力。
BlackBerry JDE提供了以下幾種連接類型:
- 流連接(StreamConnection接口,包括:
1. HTTP 連接(HttpConnection接口)
2. HTTPS連接(HttpsConnection接口)
3. Socket連接(SocketConnection接口)
4. 安全socket連接(SecureConnection接口)
5. 序列連接到BlackBerry設備的一個通信接口(CoomConnection接口)
- 數據報連接(DtagramConnection接口),包含
1. UDP數據報連接(UDPDatagramConnection接口)
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的集合。
net.rim.device.api.util包包含了多個類來管理特定類型的數據集合,包括向量,哈希表,映射以及棧。
應用程序控制
應用程序控制允許系統管理員操作以下動作:
- 控制內部連接(公司防火牆背後的連接)
- 控制外部連接
- 控制本地連接(序列和USB連接)
- 控制訪問鍵存儲(key store)
- 控制訪問特殊的API.
- 阻止第三方應用程序存在BlackBerry設備上。
爲了得到更多信息,參看BlackBerry Enterprise Server Handheld Management Guide的應用程序管理。
受限制訪問的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) |
允許 |
Tags: BlackBerry, API, J2ME