在 Android 應用開發中,經常需要讓用戶撥打電話或輸入電話號碼。最直接的方式是啟動系統內建的撥號介面,讓用戶確認後再撥出。這篇文章將介紹如何正確開啟撥號盤,並取得用戶輸入的號碼。
許多開發者嘗試用 EditText 並設定 InputType.TYPE_CLASS_PHONE 來模擬撥號輸入,但這僅能提供數字鍵盤輸入,缺乏真實撥號介面的完整功能(如通話記錄、聯絡人查詢、SIM 卡選擇等)。且無法直接觸發系統撥號流程,使用者體驗不佳。
Android 提供標準的 Intent.ACTION_DIAL 動作,能啟動系統撥號器並預填號碼。用戶需手動點擊撥打鍵才會撥出,符合安全規範。以下是完整程式碼範例:
Intent dialIntent = new Intent(Intent.ACTION_DIAL);
dialIntent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(dialIntent);
關鍵點說明:
Intent.ACTION_DIAL:開啟撥號介面,不會直接撥打,需用戶確認。Uri.parse("tel:" + phoneNumber):傳遞電話號碼,支援特殊字元如 *、#、,(暫停)等。CALL_PHONE 權限),可改用 Intent.ACTION_CALL,但建議優先使用 ACTION_DIAL 以尊重用戶意願。在啟動前建議檢查裝置是否支援撥號功能,避免無電話模組的平板裝置崩潰:
PackageManager pm = getPackageManager();
if (pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
// 支援撥號,安全啟動 Intent
startActivity(dialIntent);
} else {
Toast.makeText(this, "此裝置不支援撥號功能", Toast.LENGTH_SHORT).show();
}
A:可使用 PhoneNumberUtils.isGlobalPhoneNumber() 或正則表達式預先驗證,但系統撥號器本身也會做基本檢查。
A:系統撥號介面不可自訂。若需完全客製化,須自行實作撥號邏輯並申請 CALL_PHONE 權限,但複雜度極高且易違反政策,不建議。
開啟 Android 撥號介面的標準且安全做法是使用 Intent.ACTION_DIAL 搭配 tel: URI。這不僅程式碼簡潔,還能確保跨裝置相容性、尊重用戶隱私與系統安全機制。避免自行模擬撥號盤,善用系統元件才是開發正道。