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

J2ME MIDP 2.0 與 WAP 實現手機撥號功能對比

     編輯:Java 相關知識

在功能機時代,J2ME MIDP 2.0 與 WAP/WML 均提供調用手機撥號器的標準機制。本文對比兩種技術棧的實現方式、代碼示例與適用場景,為維護舊系統或理解移動端調用系統能力演進提供參考。

一、 J2ME MIDP 2.0: MIDlet.platformRequest()

核心 API

public final void platformRequest(String url) throws ConnectionNotFoundException
  • 參數:URL Scheme 標識動作類型。撥號使用 tel:<phone-number>。
  • 行為:系統將 MIDlet 置後台,啟動原生撥號應用並預填號碼,用戶確認後撥打。資源可用時立即切換。
  • 異常:ConnectionNotFoundException — 設備不支持該 Scheme 或無撥號應用。

完整可運行示例 (Nokia 7610 / MIDP 2.0 驗證通過)

package com.j2medev.call;

import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class TeleMIDlet extends MIDlet implements CommandListener {
    private Display display = null;
    private List main = null;

    public void startApp() {
        if (display == null) {
            display = Display.getDisplay(this);
            main = new List("測試電話功能", List.IMPLICIT);
            main.append("13810000000", null);  // 虛擬號碼
            main.append("13810000001", null);
            main.setCommandListener(this);
        }
        display.setCurrent(main);
    }

    public void pauseApp() {}
    public void destroyApp(boolean unconditional) {}

    public void commandAction(Command cmd, Displayable displayable) {
        if (cmd == List.SELECT_COMMAND) {
            String number = main.getString(main.getSelectedIndex());
            try {
                this.platformRequest("tel:" + number);  // 關鍵調用
            } catch (ConnectionNotFoundException ex) {
                ex.printStackTrace();
                // 可彈出 Alert 提示用戶設備不支持
            }
        }
    }
}

關鍵點總結

  • 僅 MIDP 2.0+ 支持 (MIDP 1.0 無此 API)。
  • tel: 為標準 Scheme (RFC 3966),部分設備支持 tel:+86-138... 國際格式。
  • MIDlet 狀態轉為 paused,撥號結束用戶返回應用時觸發 startApp()。
  • 簽名/權限:非受信任域 MIDlet 可能彈出安全提示「允許應用發起通話?」。

二、 WAP/WML: wtai://wp/mc (Wireless Telephony Application Interface)

核心機制

WML 卡片/模板中通過錨點 <a> 或任務 <go> 使用 wtai://wp/mc;<number> URL 喚起撥號。

兩種寫法

  1. 直接寫死號碼:
    <a href="wtai://wp/mc;1331597312*">撥打電話</a>
  2. 輸入框動態號碼:
    <input name="phone_no" format="*m" value="13"/>
    <do type="option" label="呼出號">
      <go href="wtai://wp/mc;$(phone_no)"/>
    </do><br/>

    format="*m" 限制輸入數字/*, # 等撥號字符;$(phone_no) 為變量引用。

WTAI 支持的其他動作 (擴展)

  • wtai://wp/sd;<number> — 發送 DTMF 音 (撥號後控制語音菜單)。
  • wtai://wp/ap;<number> — 添加電話簿條目。

三、 對比總結

四、 現代視角的演進

  • Android:Intent(Intent.ACTION_DIAL, Uri.parse("tel:...")) — 顯式 Intent 啟動撥號器,用戶確認撥打。
  • iOS:UIApplication.shared.open(URL(string: "tel:...")!) — 系統彈窗確認後撥打。
  • H5/微信小程序:<a href="tel:..."> / wx.makePhoneCall({phoneNumber}) — 瀏覽器/宿主環境攔截並彈窗確認。
  • 統一趨勢:用戶確認門檻提高 (防惡意撥號/騷擾)、權限模型細粒度化、Scheme 標準化 (RFC 3966 tel:)。

理解 MIDP 2.0 platformRequest 與 WAP wtai 的設計,有助於把握移動端調用系統能力的核心模式:標準 Scheme + 用戶確認 + 權限隔離。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度J2ME MIDP 2.0WAP/WML
技術層級客戶端原生應用 (MIDlet)服務端頁面描述 (WML 卡片)
調用 APIMIDlet.platformRequest("tel:...")<a href="wtai://wp/mc;...">
部署方式OTA 安裝 JAD/JAR 到手機WAP Gateway 瀏覽 URL
交互體驗豐富 UI (List, Form, Canvas)、事件驅動、離線邏輯簡單卡片跳轉、表單提交、依賴網絡
安全/權限簽名域控制、彈窗確認瀏覽器/網關信任域、WTLS 通道加密
適用場景複雜業務邏輯、本地緩存、游戲/工具類應用輕量信息查詢、營銷活動、無需安裝即用