在MIDP2.0中提供了非常重要的一項功能:調(diào)用外部平臺的服務(wù),比如從網(wǎng)絡(luò)開始下載和安裝一個MIDlet套件、發(fā)起話音呼叫。如果你做了一個通信錄,那么就可以直接調(diào)用電話服務(wù)來呼叫一個號碼。在MIDP2.0中可以通過MIDlet.platformRequest()方法實現(xiàn)上面的功能。
參考一下javax.microedition.midlet.MIDlet.platformRequest()的java doc,你可以發(fā)現(xiàn)他只有一個參數(shù)為String類型的URL,當你調(diào)用他的時候,他會把這個URL傳遞給應(yīng)用管理軟件。應(yīng)用管理軟件來判斷這個參數(shù)是否合理,是否存在相關(guān)的服務(wù)可以使用。如果服務(wù)可用并且需要MIDlet首先退出才能執(zhí)行調(diào)用的服務(wù)的話,那么方法會返回一個boolean類型的true。如果服務(wù)并不存在的話會拋出ConnectionNotFoundExcepton。
在MIDP2.0的規(guī)范中,定義了兩種服務(wù)類型:
1:如果URL的指向是一個jar文件或者jad文件,例如hello.jad,那么平臺會啟動一個正常的安裝進程來安裝。
2:如果URL是以tel:開始的,例如tel:01062289873,那么參數(shù)會傳遞給電話服務(wù)程序去發(fā)起一個話音呼叫,被呼叫方就是后面的電話號碼。
設(shè)備制造商可以自由的實現(xiàn)其他的平臺服務(wù),例如調(diào)用web瀏覽器瀏覽網(wǎng)頁等等。我們必須清楚這個方法并不是堵塞的方法。
在WTK2.1中提供了對這個方法的支持,你只需要配置一下就可以了。假設(shè)你的WTK的安裝目錄為WTK_HOME,那么進入WTK_HOME/lib,編輯system.config文件,在里面加上一句:com.sun.midp.midlet.platformRequestCommand: "C:/PRogram Files/MYIE2/MyIE.exe"。注意一定要
把這句話寫在一行內(nèi),不要換行。這樣當我們把類似這樣的URL,http://www.j2medev.com傳給platformRequest()的時候,系統(tǒng)就會啟動MyIE去打開www.j2medev.com的主頁。由于我的手機不能支持MIDP2.0所以不能測試電話呼叫,MIDlet下載等平臺服務(wù),如果你的可以的話可以編寫代碼測試一下。下面是我編寫的代碼在模擬器中進行了測試,當用戶按下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://m.survivalescaperooms.com)
新聞熱點
疑難解答