程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用platformRequest()自動更新MIDlet套件

使用platformRequest()自動更新MIDlet套件

編輯:J2ME

MIDP 2.0提供了一系列的新特性,其中一個就是調用平台的應用。例如可以調用WAP浏覽器訪問特定的網址,也可以調用電話應用程序呼叫某個號碼。上述兩個功能都可以使用MIDlet類的platformRequest()方法實現,platformRequest()接受一個String類型的參數url,如果是呼叫電話號碼則url的形式為tel:13810011001。如果是調用WAP浏覽器則url的形式類似於wap.wml">http://www.J2MEdev.com/wap.wml

本文介紹如何使用platformRequest()方法自動更新MIDlet套件,在MIDP的文檔中說明。如果url的形式為一個指定的MIDlet套件,可以是JAD文件,也可以是jar文件。例如http://www.J2MEdev.com/helloworld.jad。這個時候,此請求會被認為是安裝MIDlet套件來對待,這樣用戶可以控制安裝的過程,就像我們直接從WAP浏覽器輸入地址安裝MIDlet套件一樣。如果請求的MIDlet套件是當前正在運行的應用程序的升級版,則當前的程序需要先退出,然後執行更新操作。

如果想讓發布的MIDlet套件具備自動升級的功能,那麼需要提供一個服務器端程序,服務器端程序能夠檢測是不是有更新版本的應用程序下載,並且可以將這個結果告訴給客戶端。通常這樣的服務器端可以實現為Web應用程序,用servlet和MIDlet通信。當用戶運行MIDlet的時候,MIDlet首先連接指定的服務器獲取信息,如果沒有新版軟件則正常運行,如果有新版本的軟件則是用platformRequest()方法請求安裝應用程序。

                     if (update == NEED_UPDATE) {

                            try {

                                   platformRequest("http://www.J2MEdev.com/wap/autoupdate.jar");

                                   destroyApp(true);

                                   notifyDestroyed();

                            } catch (ConnectionNotFoundException ex) {

                                   ex.printStackTrace();

                            }

                           

                     }else{

                            //do something else

                     }

這裡我們在代碼中執行destroyApp(true),讓MIDlet套件主動退出。如果想做的更為專業,可以在檢測到有新版本的軟件的時候,顯示一個對話框讓用戶選擇是否自動更新,根據用戶的選擇執行相關的操作。下面的代碼UpdateMIDlet可以用於演示此項功能。

/**

 * author mingJava

 * Created on 2006-3-8

 */

package com.J2MEdev.autoupdate;

 

import Java.util.Random;

import Javax.microedition.io.ConnectionNotFoundException;

import Javax.microedition.lcdui.Display;

import Javax.microedition.lcdui.Form;

import Javax.microedition.midlet.MIDlet;

import Javax.microedition.midlet.MIDletStateChangeException;

 

public class UpdateMIDlet extends MIDlet {

 

       public static int NEED_UPDATE = 0;

 

       public static int NO_UPDATE = 1;

 

       private Display display = null;

 

       protected void startApp() throws MIDletStateChangeException {

              if (display == null) {

                     display = Display.getDisplay(this);

                     int update = (new Random().nextInt() >>> 1) % 2;

                     if (update == NEED_UPDATE) {

                            try {

                                   platformRequest("http://www.J2MEdev.com/wap/autoupdate.jar");

                                   destroyApp(true);

                                   notifyDestroyed();

                            } catch (ConnectionNotFoundException ex) {

                                   ex.printStackTrace();

                            }

                           

                     }else if(update == NO_UPDATE){

                            Form form = new Form("Test");

                            form.append("No update is needed");

                            display.setCurrent(form);

                     }

              }

       }

 

       protected void pauseApp() {

 

       }

 

       protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

 

       }

 

}

       為了模擬是否有升級軟件的可能,我們在startApp()中隨機生成一個隨機數update。如果update等於0則代表有升級版本,如果update等於1則代表不需要升級。為了簡單起見,這裡我們沒有編寫聯網檢測升級版本的程序。此程序在Nokia 7610上測試通過,可以自動升級MIDlet套件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved