自 2017 年 1 月 1 日起,在印度銷售的所有行動裝置都必須提供緊急按鈕,以符合印度電信部 (DoT) 的規定。為符合這些法規要求,Android 內建緊急應變功能參考實作項目,可在 Android 裝置上啟用緊急按鈕。
在 Android 8.0 以上版本中,這項功能預設為啟用,但必須修補先前版本的現有建構作業。這項功能專為印度市場銷售的裝置設計,但可納入全球銷售的所有裝置,因為這項功能在印度境外不會生效。
範例和來源
緊急應變功能是在 Android 開放原始碼計畫 (AOSP) 的架構/基礎專案中實作,這項功能適用於 Android 最新發布的分支版本,且在 Android 8.0 以上版本中預設為啟用。
這項功能適用於下列分支機構和提交內容。 提供這項資訊是為了讓裝置製造商將必要變更修補到現有建構版本中。如果裝置製造商想實作 AOSP 參考緊急應變功能,可以從適用的分支版本中挑選提交內容,並納入自己的建構版本。
表 1. 為 Android 開放原始碼計畫參考緊急應變功能挑選的變更
| Branch | 修訂版本 |
|---|---|
| android-latest-release | e0c3c66
新增緊急應變功能 42a4338 新增緊急應變動作字串的翻譯 4df8d64 修正平板電腦會顯示緊急應變功能的問題 |
| nougat-dev | e6680d9
新增緊急應變功能 95e1865 新增緊急應變動作字串的翻譯 a70bb89 修正緊急應變功能會顯示在平板電腦上的問題 |
| marshmallow-dev | cd22634
新增緊急應變功能 13f51c6 新增緊急動作字串的翻譯 6531666 修正平板電腦會顯示緊急應變功能的問題 |
| lollipop-mr1-dev | 5fbc86b
新增緊急應變功能 1b60879 新增緊急應變動作字串的翻譯 d74366f 修正平板電腦會顯示緊急應變功能的問題 |
實作
「緊急情況容許」功能不會變更透過 Android 軟體開發套件 (SDK) 公開的 API。啟用並啟動這項功能後,系統會提供兩種觸發條件,可發起撥打 112 的緊急電話。112 是印度境內唯一可用的緊急電話號碼,且印度電信部法規規定必須使用這個號碼。
你可以透過下列方式發起緊急電話:
| 長按螢幕鎖定畫面上的「緊急」按鈕 |
輕觸「全域動作選單」中的「緊急求救」選項 |
|---|---|
圖 1. 螢幕鎖定畫面上的「緊急」按鈕。 |
圖 2. 透過全域動作選單 (長按電源鍵即可存取) 執行緊急動作。 |
這項功能會導入下列內部元件:
EmergencyAffordanceManagerframeworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.javaEmergencyAffordanceServiceframeworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java
EmergencyAffordanceManager
EmergencyAffordanceManager 提供內部 API,可使用緊急應變功能。這個類別提供的方法可啟動緊急電話,並在執行階段查詢是否應啟用這項功能。
void performEmergencyCall():撥打緊急電話。boolean needsEmergencyAffordance()。決定是否要啟用這項功能。
您可以在建構時將 EmergencyAffordanceManager.ENABLED 常數變更為 false,永久停用這項功能。這會導致 needsEmergencyAffordance() 一律傳回 false,並防止 EmergencyAffordanceService 啟動。
EmergencyAffordanceService
EmergencyAffordanceService 是一項系統服務,可監控所有偵測到的行動網路的行動國家/地區代碼 (MCC) 和已安裝 SIM 卡的 MCC。如果安裝的 SIM 卡或偵測到的行動網路的 MCC 與印度 MCC (404 或 405) 相符,這項功能就會啟用。也就是說,即使沒有 SIM 卡,這項功能仍可在印度啟用。假設行動網路允許註冊緊急電話,即使未安裝 SIM 卡也沒問題。只要安裝非印度 SIM 卡,且偵測到的網路沒有相符的 MCC,這項功能就會維持啟用狀態。
下列資源和設定會影響緊急應急措施功能的行為。如果設定類型為:
- 資源:在
frameworks/base/core/res/res/values/config.xml中定義的內部資源。 - 設定:儲存在系統設定供應商中的設定。
表 2. 影響緊急應急功能運作方式的設定
| 設定類型 | 名稱 | 說明 |
|---|---|---|
| 資源 | config_emergency_call_number | 發起緊急電話時自動撥打的電話號碼。 類型:字串 預設值:112 |
| 資源 | config_emergency_mcc_codes | 整數陣列,列出應啟用這項功能的 MCC。 類型:整數陣列 預設值:{404,405} |
| 設定 | emergency_affordance_number | 使用緊急情況功能撥打電話時,系統會覆寫全域設定,改為撥打這個號碼。這只會影響可偵錯的建構映像檔 (也就是建構類型為 userdebug 或 eng)。這項功能僅供測試。 類型:字串 預設值:未設定 |
| 設定 | force_emergency_affordance | 全域設定,無論裝置狀態為何,是否都應顯示緊急應變功能。這項功能僅供測試。 類型:布林值 (1 或 0) 預設值:未設定 --> 0 |
啟用撥打 112 的緊急電話功能
緊急電話功能會使用緊急撥號器接通電話,因此即使螢幕處於鎖定狀態,電話也能接通。緊急撥號器只會透過系統屬性,將電話撥給無線電介面層 (RIL) 提供的號碼清單:
ril.ecclist(未安裝 SIM 卡時)。ril.ecclistSimSlotNumber(插入 SIM 卡時) 和SimSlotNumber(預設訂閱者的插槽 ID)。
使用緊急應變功能的裝置製造商必須確認,印度境內的裝置一律會在 RIL 中啟用 112 做為緊急電話號碼。
驗證
在可偵錯的建構版本上進行測試時,可以使用下列指令變更撥打的號碼:
adb shell settings put global emergency_affordance_number NUMBER_TO_CALL
雖然可以在一般使用者版本中設定這項設定,但系統會忽略這項設定。 如要實際連線通話,號碼必須位於 RIL 提供的緊急電話號碼清單中。您可以在 userdebug 裝置上,透過根層級的殼層執行下列指令,暫時設定這項值:
setprop ril.ecclist "$(getprop ril.ecclist),NUMBER_TO_CALL"
即使系統未偵測到印度行動網路或插入印度 SIM 卡,您也可以使用下列指令強制啟用緊急應變功能。
adb shell settings put global force_emergency_affordance 1
建議您至少測試下列情況:
- 啟用後,長按鎖定畫面上的「緊急情況」按鈕 (圖 1),即可撥打指定的緊急電話號碼。
- 啟用後,全域動作選單會顯示「緊急情況」項目,輕觸該項目即可撥打指定的緊急電話號碼。
- 如果系統偵測到印度行動網路,但安裝的 SIM 卡並非印度 SIM 卡,這項功能不會啟用。
- 只要裝置安裝印度 SIM 卡,無論偵測到的行動網路為何,這項功能都會啟用。
- 只要裝置位於印度行動網路涵蓋範圍內,無論安裝的 SIM 卡為何,這項功能都會啟用。
如果裝置支援多張 SIM 卡,測試應驗證每個 SIM 卡槽的 SIM MCC 偵測功能是否正常運作。緊急應變功能不受 Android Compatibility Test Suite (CTS) 管轄,因此沒有相關的 CTS 測試。
常見問題
問:印度尚未委託使用緊急電話號碼 112。是否仍應使用?
112 是印度使用的公眾安全緊急應變中心 (PSAP) 號碼,由整合式緊急通訊與應變系統 (IECRS) 定義。在 PSAP 啟用前,所有撥打 112 的電話都會轉接至現有的 100 緊急電話號碼 (但這是電信業者的責任,而非 Android)。
問:如果使用其他觸發方式 (例如連按三下電源鍵),會發生什麼情況?
裝置製造商可以實作其他觸發條件。不過,雖然印度電信部核准了三按硬體電源鍵的動作,但 AOSP 參考實作項目不支援這項觸發動作,因為部分廣泛使用的應用程式 (例如「相機」應用程式) 會使用電源鍵手勢,包括重複按電源鍵。這類應用程式可能會干擾緊急撥號器,或讓使用者在嘗試觸發應用程式中的動作時,意外觸發緊急按鈕。