首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

MIDP 2.0 平台服務調用實戰:platformRequest() 啟動瀏覽器、撥打電話、OTA 安裝新 MIDlet

     編輯:J2ME

核心 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 / .jarMIDlet Suite 安裝https://host/app.jad觸發標準 OTA 安裝向導
tel:<number>語音撥號tel:+8613800000000彈出撥號確認,用戶確認後撥打

廠商擴展服務 (非標準)

  • sms:<number>?body=<text> - 發送短信 (部分設備)
  • mailto:<email> - 郵件客戶端
  • file://... - 文件管理器 (支持 JSR 75 設備)

WTK 2.1 模擬器配置瀏覽器映射

  1. 編輯 %WTK_HOME%\lib\system.config
  2. 添加行:com.sun.midp.midlet.platformRequestCommand: "C:\Program Files\MyIE2\MyIE.exe"
  3. 重啟模擬器,調用 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();
                // 降級處理:提示用戶手動打開瀏覽器
            }
        }
    }
}

實戰注意事項

擴展:構建通訊錄一鍵撥號功能

// 假設從 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)、返回值語義、異常處理與模擬器配置,即可實現瀏覽器跳轉、一鍵撥號、應用自更新等核心體驗增強功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景處理建議
撥號 (tel:)調用前提示用戶確認;返回 true 時需自行 destroyApp + notifyDestroyed
OTA 安裝新版本指向 .jad URL;安裝完成後舊版本通常被替換,需處理數據遷移 (RMS 保留規則見 MIDP 2.0 規範 10.3.3)
打開瀏覽器返回 false 時 MIDlet 可繼續運行;建議在 pauseApp 中釋放非必要資源
異常處理捕獲 ConnectionNotFoundException,友好提示「設備不支持該操作」