精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

BlackBerry用戶界面開發(fā)實例

移動開發(fā)
本文通過一個辦公審批的應用案例,介紹如何使用BlackBerry UI API為用戶在黑莓手機開發(fā)用戶界面程序。

本文通過一個辦公審批的應用案例,介紹如何使用BlackBerry UI API為用戶在黑莓手機開發(fā)用戶界面程序,如何使用UI組件(Screen,Manager,Field),如何擴展高級UI組件ListField,如何通過菜單/按鈕/按鍵來響應用戶交互,如何通過布局管理器Manager來處理特殊的UI布局和顯示效果,最后通過OTA無線部署這個應用到用戶的黑莓手機設備上。

面向?qū)ο螅?/p>

對黑莓手機應用開發(fā)感興趣,對黑莓應用開發(fā)稍有了解但是還沒有實戰(zhàn)經(jīng)驗,希望能對BlackBerry

UI開發(fā)有個更深入的了解。

目標:在本文的辦公審批的應用案例中,企業(yè)客戶要求開發(fā)一個運行在黑莓手機上面的用于辦公申請和批準的應用程序,讓移動辦公的用戶和他們的領導能及時地提交/查看/審批辦公申請。

應用程序的主要用戶窗口有兩個:

1.等待審批的辦公申請記錄列表,用戶可以通過菜單新建,保存,查看,刪除申請記錄;

2.查看每條申請記錄的詳情信息,領導可以查看,通過,或者拒絕該申請。

 

 

要點:

1.準備開發(fā)環(huán)境,創(chuàng)建新的BlackBerry項目,創(chuàng)建最簡單的UI應用程序Hello World,在開發(fā)環(huán)境中內(nèi)置的黑莓9700模擬器中運行。

2.創(chuàng)建主從共兩個窗口(Screen);創(chuàng)建菜單為主從窗口進行之間進行導航。

3.為主窗口添加可以在列表中滾動顯示數(shù)據(jù)的高級字段ListField,該字段和待審批的申請記錄列表進行數(shù)據(jù)綁定。

4.為從窗口添加顯示和輸入字段(Field),命令按鈕。使用布局管理器處理UI布局,背景色。

5.處理黑莓手機的返回鍵(Return),軌跡球(TrackBall)事件,輸入字段數(shù)據(jù)變化等事件。

6.配置模擬器中文顯示,單步跟蹤調(diào)試。

7.OTA應用部署,為不同OS版本的手機8300/9700分別打包應用程序為jad/alx包,架設

OTA部署服務器,為8300/9700手機自動部署對應OS版本的程序。

8.后記。

對讀者的前提要求:

要求讀者對BlackBerry平臺/BlackBerry UI API/Java語言都稍有了解。

1準備開發(fā)環(huán)境

準備開發(fā)環(huán)境,創(chuàng)建新的BlackBerry項目,創(chuàng)建最簡單的UI應用程序HelloWorld,在開發(fā)環(huán)境中內(nèi)置的黑莓9700模擬器中運行。

1.1準備開發(fā)環(huán)境,下載并安裝BlackBerryJavaPlug-inforEclipse開發(fā)工具本文使用的BlackBerry Java Plug-in for Eclipse版本為:v1.1beta2(1.1.1),相對于JDE該工具簡稱e JDE。e JDE 1.1.1內(nèi)置eclipse 3.5.1。e JDE 1.1.1內(nèi)置BlackBerry Java SDK version 5.0.0。而BlackBerry Java SDK里面又包括MDS模擬器,手機模擬器simulator,例子代碼samples,文檔docs等內(nèi)容。

(下載地址:http://na.blackberry.com/eng/developers/devbetasoftware/javaplugin.jsp)

1.2創(chuàng)建BlackBerry Project啟動Eclipse,File New Other,選擇BlackBerry Project,填寫Projectname為UI Sample,選擇JRE->Useaprojectspecific JRE為BlackBerry JRE 5.0.0,點擊Finish按鈕創(chuàng)建項目。

 

 

注:向?qū)е械腂lackBerry JRE 5.0.0對應BlackBerry Java SDK version 5.0.0,后者內(nèi)置采用BlackBerry OS 5.0.0的黑莓9000/9550/9700手機模擬器。如果需要開發(fā)測試針對黑莓8310等其他型號手機的應用程序,你可以通過eclipse在線更新的方式安裝4.2.1/4.5/4.6/4.7等版本的BlackBerry Java SDK,比如SDK version 4.5內(nèi)置黑莓8310手機模擬器。具體如何通過eclipse在線升級請參考www.blackberry.com/developers網(wǎng)站。

1.3導入HelloWorld例子代碼

把開發(fā)工具內(nèi)置的例子代碼hello world demo導入到項目src目錄。BlackBerry開發(fā)工具帶了幾十個例子程序在:\TOOLS\BlackBerry_JDE_PluginFull_1.1.1\plugins\net.rim.ejde.componentpack5.0.0_5.0.0.14\components\samples目錄下面。把com\rim\samples\device\helloworlddemo目錄(包括com\rim\samples\device等父目錄,Java代碼和png圖片)拷貝到項目src目錄下面。

 

 

1.4為程序添加手機上面的圖標

鼠標雙擊BlackBerry_App_Descriptor.xml文件,在第一個欄目(Application欄目)的右邊Applicationicons區(qū)域點擊Add按鈕,選擇src\com\rim\samples\device\helloworlddemo\image\helloworld_jde.png文件,保存。

 

 

1.5在開發(fā)工具內(nèi)置的模擬器中測試HelloWorld應用

鼠標點擊eclipse菜單Run->Run Configurations,在對話框中點擊左上角的按鈕,創(chuàng)建新的模擬器配置環(huán)境;修改Name為UI Sample;在對話框右邊第一個欄目Projects欄目中勾上UI Sample項目;在對話框右邊第三個欄目Simulator欄目中Device區(qū)域選擇帶qwert鍵盤的黑莓9700手機(缺省的模擬器是黑莓9550Storm2,這款手機不帶qwert鍵盤,該型號模擬器不是特別方便在PC機屏幕上操作);點擊Run命令按鈕運行。

 

 

 

 

1.6在手機模擬器上運行Hello World

運行在手機模擬器Downloads文件夾中,你可以看到Hello World演示程序的圖標,運行這個程序。運行結果如圖。

 

2創(chuàng)建主從共兩個窗口(Screen);創(chuàng)建菜單為主從窗口進行之間進行

導航

下面我們將創(chuàng)建主從共兩個窗口(Screen),一個是初始的申請記錄列表窗口,一個是申請記錄詳細內(nèi)容。

3.為主窗口添加可以在列表中滾動顯示數(shù)據(jù)的高級字段ListField,該字段和待審批的申請記錄列表進行數(shù)據(jù)綁定。

最終的運行結果如圖

你可以看到屏幕中間列表顯示的三條待審批的記錄,用戶打算通過菜單對審批記錄進行操作。

 

 

4為從窗口添加顯示和輸入字段;使用布局管理器處理UI布局,背景色

4.1從窗口用戶界面的劃分從程序設計的角度,從窗口被分割為兩個重要的部分:申請編輯區(qū)域,按鈕區(qū)域。另外還有標題區(qū)域,分割橫線。

|-------------------------- |

| 標題 |

|-------------------------- |

| 多個輸入 域 | < --------- 編輯區(qū)域 , displayMessa ge( ) 方法

|--------- 分割橫線 - -- -------|

| 同意 返 回 | < --------- 按鈕區(qū)域 , displayButto n() 方法

|-------------------------- |

4.2構造方法

編輯區(qū)域包括兩個輸入域Edit Field,一個可以多行錄入的文本輸入域Text Field,一個時間輸入域DateField。按鈕區(qū)域包括兩個按鈕,并排排列。

  1.  
  2.  
  3. public class MessageViewScreen extends MainScreen { MessagesListField _list;  
  4.  
  5. Message _message;  
  6.  
  7. boolean _editable;  
  8.  
  9. final static int MAX_CHARS = 128; EditField senderField;  
  10.  
  11. EditField subjectField; TextField contentField; DateField dateField;  
  12.  
  13. ButtonField newButton; ButtonField agreeButton; ButtonField returnButton;  
  14.  
  15. // 父窗口的 數(shù)據(jù)通 過參 數(shù) list 和 message 傳遞 過來,并 且通過 editable 參 數(shù)告知 這個窗 口是用來 顯示數(shù) 據(jù),還 是 用來編輯 數(shù)據(jù)的 。  
  16.  
  17. public MessageViewScreen(MessagesListField list, Message message, boolean editable) {  
  18.  
  19. _list = list;  
  20.  
  21. _message = message;  
  22.  
  23. _editable = editable;  
  24.  
  25. displayMessage();  
  26.  
  27. add(new SeparatorField());  
  28.  
  29. displayButton();  

4.3編輯區(qū)域coding

在display Message()方法中,以可修改或者只讀的樣式(style)在窗口中添加各種輸入字段。在屏幕(Screen)上面添加輸入字段(Field)是一件很容易的事情,只需要調(diào)用add(字段)方法就可以了。但是客戶新要求設置所有輸入字段的背景顏色為淡藍色。一種常用的方法是使用VerticalFieldManager布局管理器類,在布局管理器中設置背景色,然后調(diào)用manager.add(field)把相應輸入字段放進這個布局管理器里面。

  1. protected void displayMessage(){  
  2.  
  3. VerticalFieldManager manager;  
  4.  
  5. manager = (VerticalFieldManager)getMainManager();  
  6.  
  7. Background bg = BackgroundFactory.createSolidBackground(Color.LIGHTBLUE);  
  8.  
  9. manager.setBackground(bg);  
  10.  
  11. long style;  
  12.  
  13. style = EditField.READONLY;  
  14.  
  15. if (_editable) style = EditField.EDITABLE;  
  16.  
  17. senderField = new EditField(" 提交人 : ", _message .getSender(), MAX_CHARS, style);  
  18.  
  19. manager.add(senderField);  
  20.  
  21. // 其他類似 代碼從 略  
  22.  
  23. 。。。  
  24.  
  25. dateField = new DateField(" 提交日期 : ", (new Da te()).getTime(),DateFormat.DATE_MEDIUM);  
  26.  
  27. manager.add(dateField);  
  28.  
  29. // 其他類似 代碼從 略  
  30.  
  31. 。。。  
  32.  
  33. }  

4.3命令按鈕區(qū)域coding

在displayButton()方法中,添加兩個命令按鈕,這兩個命令按鈕按照布局管理器FooterManager的處理被橫著擺放,中間有一定的間隔;兩個命令按鈕和事件處理類FieldChangeListener關聯(lián),以處理用戶點擊按鈕的事件,進而審批通過或者是直接返回上級父窗口。

  1. protected void displayButton() {  
  2.  
  3. //------------------------------------------------------------------  
  4.  
  5. // 創(chuàng)建按鈕 點擊 事 件監(jiān)聽 類 FieldChangeListener  
  6.  
  7. FieldChangeListener myButtonListener = new FieldChangeListener() {  
  8.  
  9. public void fieldChanged(Field field, int context) { ButtonField fieldChanged = (ButtonField) field;  
  10.  
  11. //begin testing to see what field changed if( fieldChanged == newButton) {  
  12.  
  13. Message message = new Message(new Date(), sen derField.getText(),  
  14.  
  15. subjectField.getText(), contentField.getText(), Message.STATUS_NEW);  
  16.  
  17. _list.addMessage(message);  
  18.  
  19. close();  
  20.  
  21. }  
  22.  
  23. // 其他類似 代碼從 略  
  24.  
  25. }  
  26.  
  27. };  
  28.  
  29. //-------------------------------------------------- ----------------  
  30.  
  31. FooterManager manager = new FooterManager();  
  32.  
  33. newnewButton = new ButtonField(" 提交 ");  
  34.  
  35. newButton.setChangeListener(myButtonListener);  
  36.  
  37. if (_editable) manager.add(newButton);  
  38.  
  39. // 其他類似 代碼從 略  
  40.  
  41. // 最后把布 局管理 器連同 里面 的兩個按 鈕一起 放到 從 窗口上  
  42.  
  43. add(manager);  
  44.  
  45. }  

4.4自定義布局管理器

BlackBerry UI API中,屏幕窗口的布局管理器有很多,比如Flow Field Manager,Grid Field Manager,Horizontal Field Manager,Vertical Field Manager以及延伸出來的各種子類。但是客戶的要求多種多樣,這些窗口管理器不一定能滿足所有客戶的要求。

在本案中,客戶提出屏幕下方的兩個命令按鈕需要并排擺放,這看上去是可以用Horizontal Field Manager來處理,但是客戶又指定說這兩個命令按鈕擺放的時候,第一個按鈕距離屏幕左邊兩個字符大小,第二個按鈕距離屏幕中間左邊兩個字符大小。這就需要我們自己編寫一個窗口管理器,在sublayout(intwidth,intheight)方法中通過set Position Child()方法設置各個按鈕Field的擺放位置,通過layout Child()方法設置Field的高度/寬度;通過set Extent(intwidth,intheight)方法設置這個區(qū)域的高度和寬度。

  1. p ublic class FooterManager extends Manager {  
  2.  
  3. public FooterManager() {  
  4.  
  5. super(0);  
  6.  
  7. }  
  8.  
  9. protected void sublayout (int width, int height) {  
  10.  
  11. int fieldWidth = 100;  
  12.  
  13. int filedHeight = 100; Field field = getField(0);  
  14.  
  15. // 設置 filed 的 x 位 置為從 左邊起 ,空兩個 字符; y 位置為 0  
  16.  
  17. setPositionChild(field, getFont().getHeight() * 2, 0);  
  18.  
  19. layoutChild(field, fieldWidth, filedHeight); //lay out the field  
  20.  
  21. field = getField(1);  
  22.  
  23. // 設置 filed 的 x 位 置為從 中間 左邊起, 空兩個 字符; y 位置為 0  
  24.  
  25. setPositionChild(field, width/2 + getFont().getHei ght() * 2, 0);  
  26.  
  27. layoutChild(field, fieldWidth, filedHeight); //lay out the field  
  28.  
  29. // 設置整個 區(qū)域的 高度為 按鈕 字段的高 度即可 ,不需 要很高  
  30.  
  31. setExtent(width, getFont().getHeight() + 20);  
  32.  
  33. }  

4.5從窗口的最終運行結果如圖

 

 

5處理黑莓手機的返回鍵(Return),軌跡球(TrackBall)事件,輸入字段數(shù)據(jù)變化等事件

5.1鍵盤/軌跡球事件處理

在主窗口MessagesListViewScreen中,每當用戶按下黑莓的滾輪,或者軌跡球,或者是按下鍵盤上面的回車鍵,用戶都希望能打開并查看他所選中的申請記錄。

  1. protected boolean navigationClick (int status, int time) { Message message = list.getSelectedMessage();  
  2.  
  3. //Open message screen  
  4.  
  5. MessageViewScreen screen = new MessageViewScreen(list, message, false); UiApplication.getUiApplication().pushScreen(screen);  
  6.  
  7. return true;  
  8.  
  9. }  
  10.  
  11. protected boolean keyChar (char key, int status, int time) {  
  12.  
  13. boolean retVal = false;  
  14.  
  15. if(key == Characters.ENTER){  
  16.  
  17. Message message = list.getSelectedMessage();  
  18.  
  19. //Open message screen  
  20.  
  21. MessageViewScreen screen = new MessageViewScreen(list, message, false);  
  22.  
  23. UiApplication.getUiApplication().pushScreen(screen);  
  24.  
  25. retVal = true;  
  26.  
  27. }  
  28.  
  29. return retVal;  
  30.  
  31. }  

5.2輸入字段數(shù)據(jù)變化事件處理

在從窗口Message View Screen,如果是新建申請記錄,當用戶在屏幕中錄入或者修改了數(shù)據(jù),然后按qwert鍵盤上的Return鍵試圖關閉當前窗口的時候,我們可以在onSave()方法中捕獲用戶的退出事件,把用戶的輸入保存起來。

這里我們把新建記錄保存到主窗口的申請記錄列表_list里面。

  1. protected boolean onSave() {  
  2.  
  3. boolean save = super.onSave();  
  4.  
  5. if (save) {  
  6.  
  7. Message message = new Message(new Date(dateField.getDate()),  
  8.  
  9. senderField.getText(), subjectField.getText(), contentField.getText(), Message.STATUS_NEW);  
  10.  
  11. _list.addMessage(message);  
  12.  
  13. }  
  14.  
  15. return save;  
  16.  
  17. }  

6配置模擬器中文顯示,單步跟蹤調(diào)試

6.1配置模擬器使之具備顯示中文,錄入中文的能力大部分開發(fā)工具(JDE/e JDE)內(nèi)置的或者是獨立安裝的手機模擬器缺省都沒有安裝中文語言包,缺省用戶界面是英文。我們可以編輯相應的模擬器配置xml文件,加入中文語言包和輸入法,然后在模擬器里面點擊Options->Languageand Text Input->Language,選擇“簡體中文”,在模擬器里面點擊Options-->Languageand Text Input->Input Language,選擇“拼音(簡體中文)”,保存即可;如果在測試模擬器配置xml文件之前運行過這個模擬器,那么需要執(zhí)行components\simulator\clean.bat腳本把模擬器環(huán)境清理為干凈的運行環(huán)境,這一過程大概需要2到3分鐘。

ComponentPack5.0/OS5.0/9700模擬器的配置:

編輯eJDE安裝目錄plugins\net.rim.ejde.componentpack5.0.0_5.0.0.14\components\simulator\9700.xml文件,在之前加入下面四行,就可以讓9700模擬器具備顯示中文的能力。

ComponentPack4.5/OS4.5/8300模擬器的配置:

  1. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN< /App lic at ion > 
  2.  
  3. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.de f au ltRe s ou rce< / App lic at ion > 
  4.  
  5. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.lo caliza tio n < / App lic at ion > 
  6.  
  7. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.re nde rin g< /A pp lic at ion > 

編輯eJDE安裝目錄plugins\net.rim.ejde.componentpack4.5.04.5.0.21\components\simulator\8300.xml文件,在之前加入下面兩行就可以讓9700模擬器具備顯示中文和輸入中文的能力。

  1. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN_P iny in < /App l ication > 
  2.  
  3. < App lic at ion > n e t.rim .b lackb e rry .lan g.zh _ CN.re nde rin gSup p ort  

6.2單步跟蹤調(diào)試

在BlackBerry開發(fā)環(huán)境中對手機程序進行單步跟蹤調(diào)試是一件很容易的事情。BlackBerry Java Plug-in for Eclipse可以借助eclipse強大的debug能力對手機程序進行代碼跟蹤調(diào)試。具體操作很簡單,只要在代碼編輯界面中,雙擊左邊邊框加入跟蹤斷點,然后點擊eclipse按鈕Debug即可。

 

 

在debug過程中,eclipse的debug功能大都能夠使用,包括單步跟蹤調(diào)試,顯示和編輯代碼中的變量等等。這里就不贅述了。

提示:手機程序Java代碼System.out.println的輸出只有在eJDEdebug狀態(tài)中才會輸出到eclipse console窗口上。

 

 

7OTA應用部署

應客戶的要求,需要為不同OS版本的手機8300/9700分別打包應用程序為jad/alx包,并架設

OTA部署服務器為8300/9700手機自動部署對應OS版本的程序。

7.1為不同OS版本的手機8310/8910分別打包應用程序為jad/alx包在開發(fā)工具中,為不同OS版本的手機,比如OS4.5的8300,OS5.0的9700手機分別打包是一件輕而易舉的事情。首先在eclipse選擇項目,選擇菜單Project->Properties,左邊選擇JavaBuildPath,右邊橫向欄目選擇第三個Libraries,你可以看到項目當前配置的Build環(huán)境設置為哪個版本OS版本。選擇“JRESystemLibrary[BlackBerryJRE5.0.0]”,選擇“Edit”按鈕,在對話框AlternateJRE選擇BlackBerryJRE4.5.0,然后保存。

 

 

接下來選擇菜單Project->BlackBerry->PackageProject(s),很快你就可以在項目的deliverables目錄下面看到4.5.0子目錄,里面是剛剛package好的cod二進制運行文件,jad等文件。現(xiàn)在你可以OTA方式無線部署這個應用到手機上面了,或者是使用javaloader命令行安裝cod文件到手機上。

 

 

如果你想讓用戶可以在電腦上面通過黑莓桌面管理器安裝軟件給手機,那么你只需要編輯

BlackBerry_App_Descriptor.xml文件,在第二個欄目Build里面,勾上Generate.alxfile選項,然后重新package項目即可生成alx文件。

7.2架設OTA部署服務器為8300/9700手機分發(fā)程序

在開發(fā)人員教程-RIM開發(fā)人員教程“A70如何部署和分發(fā)應用程序”中對如何設置OTA服務器有詳細的描述。這里就簡單說明一下。

首先安裝apachehttpserver2.0,編輯conf/mime.types文件,在最后加入下面三行,然后重新啟動apache服務器。

  1. app lic at ion /ja v a - arch i v e jar app lic at ion /v nd .rim .cod cod text/v nd .s un .j2 me .ap p - d es cri p to r jad 

然后把BlackBerry項目deliverables目錄下面的4.5.0和5.0.0兩個子目錄連同文件拷貝到apachehtdocs目錄下面,在htdocs目錄下面創(chuàng)建一個包含指向兩個不同jad文件的鏈接的html文件。現(xiàn)在,用戶可以用黑莓8300或者9700手機(或者是手機模擬器通過MDS模擬器)訪問該html,進而選擇不同的jad文件鏈接以OTA方式無線下載安裝應用了。

 

 

7.3架設OTA部署服務器為8300/9700手機自動部署對應OS版本的程序

上一節(jié)中,通過apacheweb服務器html頁面發(fā)布手機程序,需要最終用戶在手機瀏覽器頁面上手工選擇手機型號/操作系統(tǒng)版本,然后點擊安裝,這對企業(yè)用戶而言用戶體驗并不友好。我們希望當企業(yè)用戶使用8300手機訪問http://192.168.1.102:8080/UISample.jad的時候,服務器可以自動地把對應的4.5.0/UISample.jad,4.5.0/UISample.cod等文件分發(fā)給手機;而當企業(yè)用戶使用9700手機訪問http://192.168.1.102:8080/UISample.jad,服務器可以自動地把對應的5.0.0/UISample.jad,5.0.0/UISample.cod等文件分發(fā)給手機。

幸運的是,黑莓手機會把自己的設備型號/操作系統(tǒng)版本等信息通過http請求頭傳遞給Web服務器。比如8300手機傳遞給服務器的httpheaderuser-agent的值為BlackBerry8300/4.5.0.44Profile/MIDP-2.0Configuration/CLDC-1.1VendorID/-1;9700手機傳遞給服務器的httpheaderuser-agent的值為BlackBerry9700/5.0.0.334Profile/MIDP-2.1Configuration/CLDC-1.1VendorID/-1。有了user-agent信息,Web服務器就可以了解客戶端設備的能力。

在Tomcat等J2EE服務器上面,你可以通過ServletAPIrequest.getHeader("user-agent")獲得上述信息,然后自動找到對應版本的jad/jar/cod文件發(fā)送給客戶端。服務器端編碼的工作,前人已經(jīng)做了很多,我們拿來稍微改就可以在J2EE服務器上面自動地為不同型號黑莓手機分發(fā)對應版本的應用程序文件了。

我們?yōu)楹谳謾C對Sun網(wǎng)站提供的代碼做了如下修改。

首先修改provisioner.props文件,設定8300和9700對應的不同目錄下面的UISample文件。(相應的,要把BlackBerry項目deliverables目錄的兩個子目錄4.5.0和5.0.0和里面的文件拷貝到J2EE WAR文件根目錄下面)。

  1. device[BlackBerry8300]=BlackBerry8300  
  2.  
  3. device[BlackBerry9700]=BlackBerry9700  
  4.  
  5. BlackBerry8300[UISample.jad]=4.5.0/UISample.jad  
  6.  
  7. BlackBerry8300[UISample.jar]=4.5.0/UISample .jar  
  8.  
  9. BlackBerry8300[UISample.cod]=4.5.0/UISample.cod  
  10.  
  11. BlackBerry9700[UISample.jad]=5.0.0/UISample.jad BlackBerry9700[UISample.jar]=5.0.0/UISample.jar BlackBerry9700[UISample.cod]=5.0.0/UISample.cod  

然后修改Provisioner.java代碼,加入cod文件后綴的MIME定義(原有代碼已經(jīng)有jad和jar的MIME定義)。

  1. // The Bl ackBerr y COD e xte nsio n  
  2.  
  3. priv at e s t ati c fi na l St ri ng COD_ E XT = " .co d";  
  4.  
  5. // The Bl ackBer r y COD M IME ty pe - J i an g  
  6.  
  7. private s tatic final S tring COD_MIME = " a pplicat i on/vnd.ri m.c od";  

在streamFile(file,response)方法中加入對CODMIME類型的處理,告訴客戶端瀏覽器將要發(fā)送cod文件以及對應MIME類型。

  1. i f ( f ile .g et P at h() .e nd sWit h( J AD_ E XT ) ) re spo nse .s et Co nte nt T y pe ( J AD_M I M E ) ;  
  2.  
  3. i f ( f ile .g et P at h() .e nd sWit h( J AR_ E XT ) ) re spo nse .se t Co nte nt T y pe ( J AR_M IME ) ;  
  4.  
  5. i f ( f ile. g et Pa t h ().endsWith( COD_ EXT )) response. s etContent T yp e ( COD_MIME );  

在doGet()方法的最前面通知手機瀏覽器和代理服務器(比如BlackBerryMDS)對此URL不要做任何cache處理。

  1. re spo nse .se t He ader( "C ac he -C o ntrol ", "no - st ore "); //H T T P 1.1  
  2.  
  3. re spo nse .se t He ader( "P r agm a" ,"no -c ac he "); //HT T P 1. 0  
  4.  
  5. re spo nse .se t Date He ade r ( "E xpire s", 0); //preve nt s c ac hi ng a t t he p ro xy s erve r  

現(xiàn)在我們把 這個 J 2E E WAR 包部署到 T om cat 服務器上 面,不同 手機通 過一個 U RL 就可以安 裝對應 的不同版 本的手 機程序 了, 這大大提 高了用 戶體驗 ,降 低了管理 員維護 的負擔 。

現(xiàn)在我們把這個J2EEWAR包部署到Tomcat服務器上面,不同手機通過一個URL就可以安裝對應的不同版本的手機程序了,這大大提高了用戶體驗,降低了管理員維護的負擔。

8后記

經(jīng)過以上整個開發(fā)部署流程,從環(huán)境搭建,代碼開發(fā),模擬器測試,單步跟蹤調(diào)試,中文模擬器配置,到靜態(tài)和動態(tài)自動的OTA部署,我們可以把這個典型的移動辦公審批場景下的應用程序部署到客戶手機終端上了。

相信讀者看完本文以后有信心自己動手在黑莓手機平臺上面開發(fā)移動辦公應用了。您回到公司后,可以從調(diào)研企業(yè)領導和業(yè)務人員需要及時有效處理的業(yè)務流程著手,馬上開始調(diào)研/設計/開發(fā)企業(yè)的移動辦公應用。

注:在黑莓手機平臺上,可以采用BlackBerryUIAPI(net.rim.device.api.ui包)/MIDPUIAPI(javax.microedition.lcdui包)/Widget(HTML,CSS,以及JavaScript)等三種API開發(fā)應用程序的用戶界面,其中前面兩種是Java API,Widget是WebUIAPI。

責任編輯:佚名 來源: BBturials
相關推薦

2010-04-02 17:45:22

Black Berry

2012-08-09 08:49:30

CoronaCorona SDKCorona SDK游

2010-05-22 16:57:09

BlackBerry開

2010-06-22 16:19:01

Black Berry

2011-05-03 15:13:23

BlackBerryWidget

2011-05-03 15:28:15

BlackBerryWidget

2011-06-21 14:12:14

Qt Linux 登錄界面

2010-08-20 13:47:11

BlackBerry應BlackBerry

2011-04-18 11:00:34

使用音頻BlackBerry

2011-03-31 13:15:18

BlackBerry

2010-07-22 15:22:58

BlackBerry開

2012-01-09 09:22:37

BlackBerry

2011-07-26 09:58:24

2010-06-12 16:29:00

BlackBerry開

2010-05-12 16:24:32

Black Berry

2011-04-13 09:55:16

Mail APIBlackBerry

2011-04-13 13:38:57

選項APIBlackBerry

2011-05-03 14:56:53

BlackBerry JavaEclipse

2010-05-08 17:22:03

Black Berry

2011-03-31 15:16:50

BlackBerry應BlackBerry RIM
點贊
收藏

51CTO技術棧公眾號

在线播放一区二区精品视频| 黄色av免费在线观看| 欧美日韩国内| 日韩高清欧美高清| 国产野外作爱视频播放| 一区二区三区在线观看免费视频| 精品视频在线一区二区在线| 亚洲女爱视频在线| 国产精品一区二区三区观看| 国产日韩久久久| 欧美va天堂| 亚洲欧美日韩精品| 欧美日韩一区二区区别是什么| 中文在线免费视频| 亚洲精品免费视频| 日本一区二区三区视频免费看| 国产日韩欧美一区二区东京热| 一区二区三区国产在线| 色噜噜狠狠狠综合曰曰曰| 国产大尺度视频| 国产国产一区| 欧美日韩国产一区在线| 欧美一级特黄aaaaaa在线看片| 涩爱av在线播放一区二区| 九色综合狠狠综合久久| 欧美中文在线免费| 久久久久久久久久久97| 日韩久久久久| 亚洲毛片在线免费观看| 成人一区二区三区仙踪林| 成人亚洲视频| 日韩欧美主播在线| 17c丨国产丨精品视频| 日本福利专区在线观看| 久久综合狠狠综合久久综合88| 亚洲va男人天堂| 午夜视频网站在线观看| 久久激情婷婷| 欧美专区在线观看| 日韩免费一二三区| 在线观看国产精品入口| 色七七影院综合| 成人性生交大免费看| 久久影视三级福利片| 日韩欧美区一区二| 久久精品久久99| 日韩国产大片| 欧美性感一类影片在线播放| 动漫av网站免费观看| 国产91足控脚交在线观看| 亚洲欧美一区二区三区国产精品| 一本一本久久a久久精品综合妖精| 久久av少妇| 久久综合色之久久综合| 久久伦理网站| 精品美女视频在线观看免费软件| aaa国产一区| 日韩欧美激情在线| 国产精品视频入口| 亚洲18女电影在线观看| 久久久久久九九九九| 日日夜夜精品免费| 成年人午夜久久久| 好吊色欧美一区二区三区四区| 亚洲av无码乱码国产麻豆| 国产精品自拍av| 99久久综合狠狠综合久久止| 亚洲成a人片77777精品| 成人小视频在线| 久久精品午夜一区二区福利| 日本人妖在线| 亚洲国产岛国毛片在线| 一本色道久久综合亚洲精品婷婷 | 亚洲最黄网站| 91精品国产乱码久久久久久久久 | 91国产免费观看| 韩国视频一区二区三区| 欧美一级在线| 精品少妇一区二区三区在线播放| 在线观看亚洲免费视频| 中文字幕av一区二区三区人| 夜夜嗨av一区二区三区四区| 国产不卡在线观看视频| 中文字幕一区二区三区在线视频 | 精品电影一区二区| 中文字幕av网址| 欧美一区二区性| 欧美成人黄色小视频| 精品小视频在线观看| 国产精品腿扒开做爽爽爽挤奶网站| 热re99久久精品国产66热| 中文字幕一二三四| 国产电影精品久久禁18| 鲁丝一区二区三区免费| 欧美性videos| 亚洲国产aⅴ天堂久久| 国产精品无码av无码| 99精品国产九九国产精品| 亚洲精品99久久久久中文字幕| 国产免费一区二区三区网站免费| 国产精品91一区二区三区| 久久久久久久久亚洲| 日韩免费av网站| 国产剧情一区二区| 欧美日韩在线一区二区三区| 好了av在线| 日韩欧美一区二区三区久久| 亚洲一二区在线观看| 欧美男同视频网| 久久久久久久久网站| 中文字幕欧美色图| 不卡欧美aaaaa| 中文字幕日韩一区二区三区不卡 | 特黄视频在线观看| 亚洲视频你懂的| 国产男女激情视频| 国产suv精品一区| 日韩在线免费视频| 久久青青草视频| 国产福利一区二区| 亚洲欧美日韩国产yyy| 亚洲电影观看| 精品日产卡一卡二卡麻豆| 国产传媒在线看| 欧美综合国产| 国产在线精品一区| 色av手机在线| 制服视频三区第一页精品| 国产精品高清无码在线观看| 国产精品s色| 国产日韩中文字幕| 在线日本中文字幕| 一本色道久久综合亚洲精品按摩| 欧美久久久久久久久久久| 999精品色在线播放| 国产激情视频一区| 久久99久久| 欧美视频中文字幕在线| 欧美一区二区免费在线观看| 欧美精品导航| 高清视频在线观看一区| 毛片免费不卡| 69久久夜色精品国产69蝌蚪网 | ●精品国产综合乱码久久久久| 国产性xxxx18免费观看视频| 六月丁香久久丫| 午夜精品一区二区三区在线视| 国产富婆一级全黄大片| 亚洲男人的天堂在线观看| 国产又粗又长又爽又黄的视频| 欧美理论电影大全| 国产精品毛片a∨一区二区三区|国| 精品资源在线看| 色噜噜狠狠色综合欧洲selulu| 在线免费观看黄色小视频| 国产一区导航| 蜜桃av久久久亚洲精品| 免费亚洲电影| 亚洲深夜福利视频| 做爰视频毛片视频| 亚洲欧洲在线观看av| 性久久久久久久久久久久久久| 亚洲精品一二三区区别| av色综合网| 色黄视频在线观看| 亚洲天堂成人在线| 中文字幕在线观看免费| 亚洲视频小说图片| 久久久高清视频| 久久精品卡一| 一本一道久久a久久精品综合| 日韩成人在线电影| 欧美国产中文字幕| 青青操视频在线| 欧美性欧美巨大黑白大战| 国产美女久久久久久| 国产成人av一区二区三区在线| 免费无码毛片一区二三区| 久久综合色占| 91免费版网站入口| 黑森林国产精品av| 在线观看国产欧美| 国产高清第一页| 午夜精品爽啪视频| 欧美成人高清视频| 超薄肉色丝袜一二三| 蜜桃91丨九色丨蝌蚪91桃色| 国产系列第一页| 美女午夜精品| 国产拍精品一二三| 国产精品69xx| 一个色综合导航| 精品国产av一区二区| 欧美日韩国内自拍| 一区二区三区影视| 99国产精品国产精品久久| 一区二区成人网| 国产尤物精品| 三区精品视频观看| 日韩成人视屏| 国产精品久久久久久亚洲调教| 国产淫片在线观看| 亚洲欧美国产va在线影院| 国产三级伦理片| 欧美性猛交xxxx乱大交蜜桃| 欧美日韩午夜视频| 久久久噜噜噜久噜久久综合| 91精产国品一二三产区别沈先生| 99热在线成人| 欧美日韩在线一区二区三区| 伊人精品久久| 国产精品69av| 小早川怜子影音先锋在线观看| 精品国产一区二区三区久久久| 五月婷婷开心中文字幕| 91精品国产麻豆| 在线永久看片免费的视频| 亚洲一区二区av电影| 特级西西人体高清大胆| 91首页免费视频| wwwww在线观看| 国产制服丝袜一区| 中文字幕视频在线免费观看| 国产亚洲精品bv在线观看| 久久福利一区二区| 色婷婷综合网| 日韩免费电影一区二区| 在线免费观看黄色网址| 亚洲精品一区在线观看| 91中文字幕在线视频| 在线一区二区三区| 三级黄色在线视频| 亚洲一区二区四区蜜桃| 欧美成人777| 国产精品久久久久一区二区三区共| 欧美一区二区三区成人精品| 粉嫩13p一区二区三区| 一级黄色大片儿| 久久99国产精品尤物| 韩国视频一区二区三区| 久久在线精品| 欧美韩国日本在线| 免播放器亚洲| 无码人妻精品一区二区三区在线| 国产一在线精品一区在线观看| 激情五月五月婷婷| 在线中文字幕第一区| 黄瓜视频免费观看在线观看www| 成人高清av| 亚洲欧美一区二区原创| 成久久久网站| 中文字幕乱码一区二区三区| 国产精品久久占久久| 亚洲成色www久久网站| 久久精品不卡| 自拍视频一区二区三区| 午夜激情久久| 亚洲国产精品女人| 黄色日韩在线| 国产特级黄色大片| 午夜亚洲性色福利视频| 男人亚洲天堂网| 日韩中文字幕一区二区三区| 亚洲性生活网站| 久久精品噜噜噜成人av农村| 亚洲午夜激情影院| 国产不卡在线视频| a级片在线观看视频| 久久综合999| 欧美狂猛xxxxx乱大交3| 国产精品天美传媒沈樵| av最新在线观看| 亚洲永久免费av| 免费日韩一级片| 欧美私模裸体表演在线观看| 国产精品国产三级国产普通话对白| 欧美一级欧美三级在线观看| 亚洲精品国偷拍自产在线观看蜜桃 | 欧美一区二区三区四区夜夜大片| 国产九一精品| 日韩人妻精品一区二区三区| 一区视频在线看| 凹凸日日摸日日碰夜夜爽1| 精品在线一区二区| 国产清纯白嫩初高中在线观看性色| av激情综合网| 毛片aaaaaa| 一区二区三区四区中文字幕| 中文字幕第15页| 欧美日韩在线亚洲一区蜜芽| 亚洲精品一区二区三区蜜桃 | 在线观看黄av| 欧美黑人国产人伦爽爽爽| 电影一区二区三区| 91精品视频在线播放| 美女一区二区在线观看| 神马影院午夜我不卡| 国内自拍视频一区二区三区 | 夜鲁夜鲁夜鲁视频在线播放| 国产精品免费一区二区三区都可以| 日本亚州欧洲精品不卡| 欧美不卡三区| 亚洲欧美一级二级三级| 日本女优爱爱视频| 成人免费精品视频| 欧美日韩国产黄色| 欧美日韩午夜激情| 国产美女精品视频国产| 亚洲美女动态图120秒| caopen在线视频| 91av福利视频| 天堂va欧美ⅴa亚洲va一国产| 日本免费高清不卡| 亚洲国产一区二区精品专区| 久热精品在线播放| 97精品久久久午夜一区二区三区| 希岛爱理中文字幕| 一本色道a无线码一区v| 成人免费观看在线视频| www.日本久久久久com.| 欧美www.| 精品在线视频一区二区| 欧美日韩精品| 在线a免费观看| 中文字幕免费一区| 国产精品男女视频| 亚洲成人精品视频| 天堂8中文在线| 成人免费高清完整版在线观看| 午夜欧洲一区| 精品少妇一区二区三区在线| 国产精品乡下勾搭老头1| 亚洲黄色网址大全| 欧美视频中文字幕| 国产视频第一区| 欧美在线xxx| 欧美综合自拍| 久久久久久久久久久99| 成人一区在线看| 久久久久久免费观看| 日韩一区二区三| 国产在线高清理伦片a| 91精品视频专区| 亚洲国产精品综合久久久| 成人亚洲免费视频| 国产精品九色蝌蚪自拍| 在线观看免费视频一区| 中文国产成人精品久久一| 成人在线不卡| 欧美亚洲视频一区| 国内成人精品2018免费看| 日韩国产第一页| 欧美一级久久久| 日本大胆在线观看| 动漫美女被爆操久久久| 黑人一区二区三区四区五区| 久久久无码人妻精品无码| 亚洲综合免费观看高清完整版在线 | 在线免费观看黄色小视频| 岛国av午夜精品| 男人天堂网在线观看| 国产高清在线不卡| 色综合天天综合网中文字幕| 热久久久久久久久| 亚洲国产日韩精品| 天堂av手机版| 日本高清视频精品| 成人婷婷网色偷偷亚洲男人的天堂| 成人午夜激情av| 亚洲免费电影在线| 亚洲欧美另类综合| 日韩av大片免费看| 人人狠狠综合久久亚洲婷婷| 色呦色呦色精品| 亚洲一级在线观看| 九色在线播放| 国产一区视频在线播放| 欧美另类视频| 丰满少妇在线观看资源站| 欧美午夜宅男影院| 成人影院在线看| 国产一区再线| 人人超碰91尤物精品国产| 可以直接看的黄色网址| 亚洲国产日韩精品在线| 巨胸喷奶水www久久久免费动漫| 日本一区二区免费高清视频| 成人国产精品免费网站| 91麻豆精品在线| 欧美日韩国产123| 影视先锋久久| 国产不卡的av| 色悠悠久久综合| av黄色在线| 日本精品视频一区| 成+人+亚洲+综合天堂| 中日韩av在线| 91超碰caoporn97人人| 国产韩日影视精品| 国产美女免费无遮挡|