在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();
}
}
}
}
(出處:http://www.49028c.com)
新聞熱點
疑難解答