程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 在MIDP2.0中調用平台服務

在MIDP2.0中調用平台服務

編輯:J2ME
  在MIDP2.0中提供了非常重要的一項功能:調用外部平台的服務,比如從網絡開始下載和安裝一個MIDlet套件、發起話音呼叫。如果你做了一個通信錄,那麼就可以直接調用電話服務來呼叫一個號碼。在MIDP2.0中可以通過MIDlet.platformRequest()方法實現上面的功能。

    參考一下javax.microedition.midlet.MIDlet.platformRequest()的Java doc,你可以發現他只有一個參數為String類型的URL,當你調用他的時候,他會把這個URL傳遞給應用管理軟件。應用管理軟件來判斷這個參數是否合理,是否存在相關的服務可以使用。如果服務可用並且需要MIDlet首先退出才能執行調用的服務的話,那麼方法會返回一個boolean類型的true。如果服務並不存在的話會拋出ConnectionNotFoundExcepton。

    在MIDP2.0的規范中,定義了兩種服務類型:
1:如果URL的指向是一個jar文件或者jad文件,例如hello.jad,那麼平台會啟動一個正常的安裝進程來安裝。
2:如果URL是以tel:開始的,例如tel:01062289873,那麼參數會傳遞給電話服務程序去發起一個話音呼叫,被呼叫方就是後面的電話號碼。
設備制造商可以自由的實現其他的平台服務,例如調用web浏覽器浏覽網頁等等。我們必須清楚這個方法並不是堵塞的方法。

    在WTK2.1中提供了對這個方法的支持,你只需要配置一下就可以了。假設你的WTK的安裝目錄為WTK_HOME,那麼進入WTK_HOME/lib,編輯system.config文件,在裡面加上一句:com.sun.midp.midlet.platformRequestCommand: "C:\Program Files\MYIE2\MyIE.exe"。注意一定要
把這句話寫在一行內,不要換行。這樣當我們把類似這樣的URL,http://www.J2MEdev.com傳給platformRequest()的時候,系統就會啟動MyIE去打開www.J2MEdev.com的主頁。由於我的手機不能支持MIDP2.0所以不能測試電話呼叫,MIDlet下載等平台服務,如果你的可以的話可以編寫代碼測試一下。下面是我編寫的代碼在模擬器中進行了測試,當用戶按下invoke按鈕的時候,MyIE正常打開http://www.J2MEdev.com

package com.J2MEdev.mingJava;

import Javax.microedition.midlet.MIDlet;
import Javax.microedition.midlet.MIDletStateChangeException;
import Javax.microedition.io.ConnectionNotFoundException;
import Javax.microedition.lcdui.*;


public class PlatformTest extends MIDlet implements CommandListener
{
    private Display display;
    private Form mainForm;
    public static final Command getCommand = new Command("Invoke",Command.ITEM,1);
    public static final String URL = "http://www.J2MEdev.com";
    
    protected void startApp() throws MIDletStateChangeException
    {
        
        display = Display.getDisplay(this);
        mainForm = new Form("Platform Test");
        mainForm.append("Click the button \"invoke\"");
        mainForm.addCommand(getCommand);
        mainForm.setCommandListener(this);
        display.setCurrent(mainForm);

    }


    protected void pauseApp()
    {
       

    }


    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }
   
    public void commandAction(Command cmd,Displayable disp)
    {
        if(cmd == getCommand)
        {
            try
            {
                boolean flag = platformRequest(URL);
                System.out.println(flag);
       
            }
            catch(ConnectionNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    }

}

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