核心 API
public boolean platformRequest(String url) throws ConnectionNotFoundException
- 屬於
javax.microedition.midlet.MIDlet 類
- 非阻塞調用,將 URL 交給 AMS 解析並啟動對應平台服務
- 返回
true:服務需 MIDlet 先退出才能執行 (如撥號、安裝新 Suite)
- 返回
false:服務可在後台執行 (如打開瀏覽器)
- 拋出
ConnectionNotFoundException:平台不支持該 URL 協議
規範定義的兩類標準服務
| URL 模式 | 服務類型 | 示例 | 行為 |
https://... / https://... | 瀏覽器/下載 | https://example.com | 啟動 WAP/WEB 瀏覽器或 OTA 安裝流程 |
.jad / .jar | MIDlet Suite 安裝 | https://host/app.jad | 觸發標準 OTA 安裝向導 |
tel:<number> | 語音撥號 | tel:+8613800000000 | 彈出撥號確認,用戶確認後撥打 |
廠商擴展服務 (非標準)
sms:<number>?body=<text> - 發送短信 (部分設備)
mailto:<email> - 郵件客戶端
file://... - 文件管理器 (支持 JSR 75 設備)
WTK 2.1 模擬器配置瀏覽器映射
- 編輯
%WTK_HOME%\lib\system.config
- 添加行:
com.sun.midp.midlet.platformRequestCommand: "C:\Program Files\MyIE2\MyIE.exe"
- 重啟模擬器,調用
platformRequest("https://www.example.com") 將啟動指定瀏覽器
完整 MIDlet 示例:啟動瀏覽器訪問官網
package com.j2medev.mingjava;
import javax.microedition.midlet.*;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.*;
public class PlatformTest extends MIDlet implements CommandListener {
private Display display;
private Form mainForm;
private static final Command INVOKE_CMD = new Command("Invoke", Command.ITEM, 1);
private static final String TARGET_URL = "https://www.j2medev.com";
protected void startApp() throws MIDletStateChangeException {
display = Display.getDisplay(this);
mainForm = new Form("Platform Service Test");
mainForm.append("Press \"Invoke\" to open browser:\n" + TARGET_URL);
mainForm.addCommand(INVOKE_CMD);
mainForm.setCommandListener(this);
display.setCurrent(mainForm);
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {}
public void commandAction(Command cmd, Displayable disp) {
if (cmd == INVOKE_CMD) {
try {
boolean mustExit = platformRequest(TARGET_URL);
System.out.println("platformRequest returned: " + mustExit);
if (mustExit) {
destroyApp(false);
notifyDestroyed();
}
} catch (ConnectionNotFoundException e) {
e.printStackTrace();
// 降級處理:提示用戶手動打開瀏覽器
}
}
}
}
實戰注意事項
| 場景 | 處理建議 |
| 撥號 (tel:) | 調用前提示用戶確認;返回 true 時需自行 destroyApp + notifyDestroyed |
| OTA 安裝新版本 | 指向 .jad URL;安裝完成後舊版本通常被替換,需處理數據遷移 (RMS 保留規則見 MIDP 2.0 規範 10.3.3) |
| 打開瀏覽器 | 返回 false 時 MIDlet 可繼續運行;建議在 pauseApp 中釋放非必要資源 |
| 異常處理 | 捕獲 ConnectionNotFoundException,友好提示「設備不支持該操作」 |
擴展:構建通訊錄一鍵撥號功能
// 假設從 PIM (JSR 75) 獲取電話號碼
String phoneNumber = contact.getString(Contact.TEL, 0); // 簡化代碼
if (phoneNumber != null) {
try {
platformRequest("tel:" + phoneNumber);
} catch (ConnectionNotFoundException e) {
// 降級:顯示號碼讓用戶手動撥打
}
}
總結
platformRequest() 是 MIDP 2.0 打通「應用內邏輯」與「平台原生能力」的關鍵橋樑。掌握標準協議 (http/tel/jad/jar)、返回值語義、異常處理與模擬器配置,即可實現瀏覽器跳轉、一鍵撥號、應用自更新等核心體驗增強功能。
- 上一篇文章: J2ME HelloWorld 深度剖析:MIDlet 生命周期、Command 交互、JAD 屬性讀取與部署全流程
- 下一篇文章: 搭建 J2ME OTA 下載服務器完整指南:Tomcat 配置 MIME、JAD/JAR 部署、WML 入口與安裝流程圖解
Copyright ©
程式碼之家 All Rights Reserved