參考一下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();
}
}
}
}