沒有數據平衡的 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,且普通瀏覽流量不會重新導向到電信公司註冊網站。驗證點擊通知 UI 中的連結會將瀏覽器帶到電信公司註冊網站。
- 驗證切換飛行模式不會重置流量限制狀態。
- 驗證更換正在使用的 SIM 卡是否會重設網路流量狀態。
- 驗證重新插入不平衡的 SIM 是否會重新啟動流量重定向並再次獲得網路流量限制。
- 驗證重新啟動手機是否會重新啟動重定向並恢復流量限制和通知 UI。
- 點選“captiveportal”通知。驗證是否建立了受限網路連線以允許使用者添加積分。
- 驗證 SIM 卡餘額充值或重新啟動是否會導致蜂窩網路流量恢復,並且電信鏈路和無餘額通知消失。
- 資料服務恢復後的健全性測試。
預設應用程式提供了一些單元測試範例和執行它們的腳本(請參閱tests/runtest.sh
)。當您實作自訂版本或行為時,您應該將這些自訂鏡像到專用的單元測試中。