自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

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

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

應(yīng)用程序的主要用戶窗口有兩個:

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

2.查看每條申請記錄的詳情信息,領(lǐng)導(dǎo)可以查看,通過,或者拒絕該申請。

 

 

要點(diǎn):

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

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

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

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

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

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

7.OTA應(yīng)用部署,為不同OS版本的手機(jī)8300/9700分別打包應(yīng)用程序?yàn)閖ad/alx包,架設(shè)

OTA部署服務(wù)器,為8300/9700手機(jī)自動部署對應(yīng)OS版本的程序。

8.后記。

對讀者的前提要求:

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

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

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

1.1準(zhǔn)備開發(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模擬器,手機(jī)模擬器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,點(diǎn)擊Finish按鈕創(chuàng)建項(xiàng)目。

 

 

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

1.3導(dǎo)入HelloWorld例子代碼

把開發(fā)工具內(nèi)置的例子代碼hello world demo導(dǎo)入到項(xiàng)目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圖片)拷貝到項(xiàng)目src目錄下面。

 

 

1.4為程序添加手機(jī)上面的圖標(biāo)

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

 

 

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

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

 

 

 

 

1.6在手機(jī)模擬器上運(yùn)行Hello World

運(yùn)行在手機(jī)模擬器Downloads文件夾中,你可以看到Hello World演示程序的圖標(biāo),運(yùn)行這個程序。運(yùn)行結(jié)果如圖。

 

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

導(dǎo)航

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

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

最終的運(yùn)行結(jié)果如圖

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

 

 

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

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

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

| 標(biāo)題 |

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

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

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

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

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

4.2構(gòu)造方法

編輯區(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(字段)方法就可以了。但是客戶新要求設(shè)置所有輸入字段的背景顏色為淡藍(lán)色。一種常用的方法是使用VerticalFieldManager布局管理器類,在布局管理器中設(shè)置背景色,然后調(diào)用manager.add(field)把相應(yīng)輸入字段放進(jìn)這個布局管理器里面。

  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關(guān)聯(lián),以處理用戶點(diǎn)擊按鈕的事件,進(jìn)而審批通過或者是直接返回上級父窗口。

  1. protected void displayButton() {  
  2.  
  3. //------------------------------------------------------------------  
  4.  
  5. // 創(chuàng)建按鈕 點(diǎn)擊 事 件監(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()方法設(shè)置各個按鈕Field的擺放位置,通過layout Child()方法設(shè)置Field的高度/寬度;通過set Extent(intwidth,intheight)方法設(shè)置這個區(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. // 設(shè)置 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. // 設(shè)置 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. // 設(shè)置整個 區(qū)域的 高度為 按鈕 字段的高 度即可 ,不需 要很高  
  30.  
  31. setExtent(width, getFont().getHeight() + 20);  
  32.  
  33. }  

4.5從窗口的最終運(yùn)行結(jié)果如圖

 

 

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

5.1鍵盤/軌跡球事件處理

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

  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,如果是新建申請記錄,當(dāng)用戶在屏幕中錄入或者修改了數(shù)據(jù),然后按qwert鍵盤上的Return鍵試圖關(guān)閉當(dāng)前窗口的時候,我們可以在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)置的或者是獨(dú)立安裝的手機(jī)模擬器缺省都沒有安裝中文語言包,缺省用戶界面是英文。我們可以編輯相應(yīng)的模擬器配置xml文件,加入中文語言包和輸入法,然后在模擬器里面點(diǎn)擊Options->Languageand Text Input->Language,選擇“簡體中文”,在模擬器里面點(diǎn)擊Options-->Languageand Text Input->Input Language,選擇“拼音(簡體中文)”,保存即可;如果在測試模擬器配置xml文件之前運(yùn)行過這個模擬器,那么需要執(zhí)行components\simulator\clean.bat腳本把模擬器環(huán)境清理為干凈的運(yù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)境中對手機(jī)程序進(jìn)行單步跟蹤調(diào)試是一件很容易的事情。BlackBerry Java Plug-in for Eclipse可以借助eclipse強(qiáng)大的debug能力對手機(jī)程序進(jìn)行代碼跟蹤調(diào)試。具體操作很簡單,只要在代碼編輯界面中,雙擊左邊邊框加入跟蹤斷點(diǎn),然后點(diǎn)擊eclipse按鈕Debug即可。

 

 

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

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

 

 

7OTA應(yīng)用部署

應(yīng)客戶的要求,需要為不同OS版本的手機(jī)8300/9700分別打包應(yīng)用程序?yàn)閖ad/alx包,并架設(shè)

OTA部署服務(wù)器為8300/9700手機(jī)自動部署對應(yīng)OS版本的程序。

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

 

 

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

 

 

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

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

7.2架設(shè)OTA部署服務(wù)器為8300/9700手機(jī)分發(fā)程序

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

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

  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項(xiàng)目deliverables目錄下面的4.5.0和5.0.0兩個子目錄連同文件拷貝到apachehtdocs目錄下面,在htdocs目錄下面創(chuàng)建一個包含指向兩個不同jad文件的鏈接的html文件?,F(xiàn)在,用戶可以用黑莓8300或者9700手機(jī)(或者是手機(jī)模擬器通過MDS模擬器)訪問該html,進(jìn)而選擇不同的jad文件鏈接以O(shè)TA方式無線下載安裝應(yīng)用了。

 

 

7.3架設(shè)OTA部署服務(wù)器為8300/9700手機(jī)自動部署對應(yīng)OS版本的程序

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

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

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

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

首先修改provisioner.props文件,設(shè)定8300和9700對應(yīng)的不同目錄下面的UISample文件。(相應(yīng)的,要把BlackBerry項(xiàng)目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文件以及對應(yīng)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()方法的最前面通知手機(jī)瀏覽器和代理服務(wù)器(比如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 服務(wù)器上 面,不同 手機(jī)通 過一個 U RL 就可以安 裝對應(yīng) 的不同版 本的手 機(jī)程序 了, 這大大提 高了用 戶體驗(yàn) ,降 低了管理 員維護(hù) 的負(fù)擔(dān) 。

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

8后記

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

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

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

責(zé)任編輯:佚名 來源: BBturials
相關(guān)推薦

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應(yīng)BlackBerry

2011-04-18 11:00:34

使用音頻BlackBerry

2011-07-26 09:58:24

2011-03-31 13:15:18

BlackBerry

2010-07-22 15:22:58

BlackBerry開

2012-01-09 09:22:37

BlackBerry

2010-06-12 16:29:00

BlackBerry開

2011-04-13 13:38:57

選項(xiàng)APIBlackBerry

2011-04-13 09:55:16

Mail APIBlackBerry

2010-05-12 16:24:32

Black Berry

2011-05-03 14:56:53

BlackBerry JavaEclipse

2010-05-08 17:22:03

Black Berry

2011-04-13 11:31:06

PIM APIBlackBerry
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號