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

J2ME 與 WAP 實現電話撥號功能完整指南

     編輯:J2ME

核心差異:智慧客戶端 vs. 薄客戶端

J2ME(MIDP 2.0)與 WAP 同樣能實現撥號,但底層機制截然不同:

  • J2ME:本地 MIDlet 呼叫 platformRequest("tel:號碼"),系統將撥號介面推至前景,MIDlet 轉背景執行,掛斷後自動回復。
  • WAP/WML:伺服器端輸出 WTAI 標籤,瀏覽器解析後喚起原生撥號器,屬伺服器導向架構。

J2ME 實作:platformRequest() 深度解析

API 簽名與行為

public void platformRequest(String url) throws ConnectionNotFoundException
  • url 格式:"tel:" + phoneNumber(如 "tel:13800138000")
  • 成功時:系統原生撥號介面彈出,MIDlet 進入 pauseApp() 狀態
  • 失敗時:拋出 ConnectionNotFoundException(裝置不支援或協定未註冊)
  • 用戶掛斷/取消後:MIDlet 自動觸發 startApp() 恢復前景

完整可執行範例(Nokia 7610 實測通過)

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;
    private List mainList;

    public void startApp() {
        if (display == null) {
            display = Display.getDisplay(this);
            mainList = new List("撥號測試", List.IMPLICIT);
            mainList.append("13800138000", null);
            mainList.append("13900139000", null);
            mainList.setCommandListener(this);
        }
        display.setCurrent(mainList);
    }

    public void commandAction(Command cmd, Displayable d) {
        if (cmd == List.SELECT_COMMAND) {
            String number = mainList.getString(mainList.getSelectedIndex());
            try {
                platformRequest("tel:" + number);
            } catch (ConnectionNotFoundException e) {
                e.printStackTrace();
                // 可在此彈出 Alert 提示裝置不支援
            }
        }
    }

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

關鍵注意事項

  1. MIDP 版本門檻:僅 MIDP 2.0+ 支援,MIDP 1.0 裝置無法使用。
  2. 號碼格式:建議包含國碼(如 +86138xxxxxxxx),提升跨網路漫遊成功率。
  3. 權限與簽名:部分需受信任簽名域才允許無提示撥號,未簽名 MIDlet 可能彈出安全確認對話框。
  4. 緊急號碼:切勿硬編碼 110/119/120 等測試,避免誤撥佔用公共資源。

WAP/WML 實作:WTAI 標準標籤

方式一:輸入框 + 選單觸發

<input name="phone_no" format="*m" value="" />
<do type="option" label="撥打">
  <go href="wtai://wp/mc;$(phone_no)" />
</do>

方式二:直接超連結(最簡潔)

<a href="wtai://wp/mc;13800138000">撥打 13800138000</a>

WTAI 協定說明

  • wtai://wp/mc;:Wireless Telephony Applications Interface - Make Call
  • 號碼後可加 * 表示結束(部分瀏覽器需要)
  • 支援 WTAI 的 WAP 瀏覽器(絕大多數功能機/早期智慧機)皆可解析

雙平台對比與選型建議

維度J2ME (MIDP 2.0)WAP/WML
開發模式客戶端原生應用伺服器端動態頁面
離線可用性應用安裝後離線可用需網路連線載入 WML
UI 客製化高(自訂 List/Canvas)低(受限於瀏覽器渲染)
部署門檻需 OTA 安裝/簽名零安裝,瀏覽器直達
適用場景通訊錄、商務工具、常用聯繫人網頁黃頁、臨時查詢、行銷落地頁

結語

J2ME 與 WAP 各有千秋:高頻、離線、介面豐富的撥號需求首選 J2ME MIDlet;一次性、輕量、廣泛觸達的場景適合 WAP/WML。現代行動開發雖已轉向 Android/iOS,但理解這兩種經典架構的設計哲學——智慧客戶端的自主性 vs. 薄客戶端的普及性——對於把握當下跨平台框架(Flutter、React Native、PWA)的權衡依然極具啟發意義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved