沒有數據餘額的 Android 裝置會允許網路流量通過,因此需要電信業者和電信公司實施緩解通訊協定。Android 實作通用解決方案,讓電信業者和電信公司指出裝置餘額不足的情況。
Android 平台提供預設的電信業者應用程式,其中包含根據網頁認證入口偵測信號緩解流量的預設行為。這也讓電信業者和原始設備製造商 (OEM) 有更多機會以低成本和高度彈性的方式自訂行為。
範例和來源
預設的電信業者應用程式位於 platform/frameworks/base/packages/CarrierDefaultApp/.
實作
預設的電信業者應用程式已設定為為未設定的電信業者提供更好的即開即用體驗。電信業者可以使用這項預設行為。您也可以在電信業者設定 XML 檔案中新增信號動作對應項目,藉此覆寫預設行為。他們可以選擇不使用預設應用程式,改用自家獨立的電信業者應用程式來使用 UICC 權限。
實作簡介
訊號
Android 架構支援將動作設定為下列參數化信號:
TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED
TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED
這些信號位於 frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java
中。
支援的動作
預設的電信業者應用程式會定義一組支援的動作,這些動作可對應至支援的信號。這些定義位於 CarrierActionUtils.java
中:
public static final int CARRIER_ACTION_ENABLE_METERED_APNS = 0; public static final int CARRIER_ACTION_DISABLE_METERED_APNS = 1; public static final int CARRIER_ACTION_DISABLE_RADIO = 2; public static final int CARRIER_ACTION_ENABLE_RADIO = 3; public static final int CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION = 4; public static final int CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION = 5; public static final int CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS = 6;
注意:如果電信業者導入自有的獨立應用程式,則可實作支援這類信號以外的信號。他們也可以定義及設定自己的動作。
預設信號-動作對應
請按照下列程序設定預設動作:
- 定義支援信號的鍵。
預設信號至動作對應項目是在
CarrierConfigManager.java
中定義。每個支援的信號都有一個鍵:public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array"; public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY = "carrier_default_actions_on_dcfailure_string_array";
- 將預設動作與信號鍵建立關聯。
預設動作 ID 與信號鍵相關聯:
sDefaults.putStringArray(KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY, new String[]{ "1, 4" //1: CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION // 4: CARRIER_ACTION_DISABLE_METERED_APNS });
電信架構會將這些動作對應至對應的訊號。
覆寫預設動作
您可以將動作 ID 與信號鍵 (定義於 CarrierConfigManager.java
) 建立關聯,在電信業者設定 XML 檔案中為支援的信號定義自訂動作。舉例來說,下列對應會停用計量 APN,並在重新導向時顯示入口網站通知:
<string-array name="carrier_default_actions_on_redirection_string_array" num="2"> <item value="1" /> <item value="4" /> </string-array>
電話服務架構會載入這些設定,並覆寫預設動作。
驗證
這項功能沒有 CTS、CTS Verifier 或 GTS 測試。
請使用下列手動驗證測試來驗證這項功能:
- 驗證電信業者的裝置不平衡訊號通知。
- 確認在失衡狀態和 Wi-Fi 關閉期間,流量重新導向節流。
- 確認網路流量會在失衡狀態下降低,並顯示通知 UI。
- 驗證在失衡狀態下語音通話/VoLTE 功能。
- 確認視訊通話在失衡狀態下遭到封鎖。
- 開啟 Wi-Fi 後,請確認使用者可以繼續瀏覽網頁,且瀏覽流量不會在失衡狀態下開啟網路流量。
- 在失衡狀態下驗證 Wi-Fi、WFC 和藍牙功能。
- 關閉 Wi-Fi。確認不平衡通知 UI,並確認一般瀏覽流量不會重新導向至電信公司註冊網站。確認點選通知使用者介面中的連結後,瀏覽器會前往電信公司註冊網站。
- 確認切換飛航模式不會重設流量節流狀態。
- 確認替換現行使用的 SIM 卡會重設網路流量狀態。
- 確認重新插入不平衡的 SIM 卡會重新啟動流量重新導向,並再次取得網路流量節流。
- 確認重新啟動手機後,重新啟用重新導向功能,並恢復流量節流和通知 UI。
- 輕觸「captiveportal」通知。確認已建立受限制網路連線,以便使用者新增信用額度。
- 確認 SIM 卡餘額補充或重新啟用會導致行動網路流量恢復,且 Telco 連結和餘額不足通知消失。
- 資料服務復原後的健全性測試。
預設應用程式會提供一些單元測試範例,以及用於執行這些測試的指令碼 (請參閱 tests/runtest.sh
)。實作自訂版本或行為時,請將這些自訂項目複製到專屬的單元測試中。