實施緊急應變計畫

自 2017 年 1 月 1 日起,所有在印度銷售的行動裝置都必須提供緊急按鈕,以符合印度電信部 (DoT) 規定。為符合這些法規要求,Android 內建了緊急情況操作提示功能的參考實作項目,可在 Android 裝置上啟用緊急按鈕。

根據預設,Android 8.0 以上版本會啟用這項功能,但必須在先前版本的現有版本中進行修補。這項功能僅適用於在印度市場銷售的裝置,但由於這項功能在印度以外的地區沒有任何影響,因此可納入全球銷售的所有裝置。

範例和來源

緊急操作空間功能已在 Android 開放原始碼計畫 (AOSP) frameworks/base 專案中實作。這項功能可在主分支中使用,並預設在 Android 8.0 以上版本中啟用。

這項功能適用於下列分支和提交。我們提供這項資訊,方便裝置製造商輕鬆將必要變更內容修補至現有版本。如要實作 AOSP 參考緊急情況提示功能,裝置製造商可以從適用的分支中挑選要提交的內容,並納入自家版本。

表 1. 針對 AOSP 參考緊急操作空間功能的挑選項目

Branch 修訂版本
主要 e0c3c66 新增緊急操作功能
42a4338 新增緊急動作字串的翻譯
4df8d64 修正平板電腦會顯示緊急操作功能的問題
nougat-dev e6680d9 新增緊急操作提示功能
95e1865 新增緊急動作字串的翻譯
a70bb89 修正平板電腦會顯示緊急操作提示功能的問題
marshmallow-dev cd22634 新增緊急操作功能
13f51c6 新增緊急動作字串的翻譯
6531666 修正平板電腦會顯示緊急操作功能的問題
lollipop-mr1-dev 5fbc86b 新增緊急操作提示功能
1b60879 新增緊急動作字串的翻譯
d74366f 修正平板電腦會顯示緊急操作提示功能的問題

實作

緊急情況提示功能不會變更透過 Android 軟體開發套件 (SDK) 公開的 API。啟用這項功能後,系統會提供兩個觸發條件,可啟動撥打印度緊急電話號碼 112 的緊急電話。112 是印度 DoT 法規規定的單一緊急電話號碼。

緊急電話可透過以下方式撥打:

長按螢幕鎖定畫面上的「EMERGENCY」按鈕
輕觸全球動作選單中的「緊急求救」選項
緊急按鈕

圖 1. 螢幕鎖定畫面上的「EMERGENCY」按鈕。

緊急選項

圖 2. 全球動作選單中的緊急求救動作 (可透過長按電源鍵存取)。

這項功能會引入下列內部元件:

  • EmergencyAffordanceManager
    frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java
    
  • EmergencyAffordanceService
    frameworks/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 相符之前,這項功能會持續啟用。

以下資源和設定會影響緊急提示功能的行為。如果設定類型為:

  • Resource:這是 frameworks/base/core/res/res/values/config.xml 中定義的內部資源。
  • 設定:儲存在系統設定提供者中的設定。

表 2. 影響緊急提示功能行為的設定

設定類型 名稱 說明
資源 config_emergency_call_number 在啟動緊急電話時自動撥打的電話號碼。
類型:字串
預設值:112
資源 config_emergency_mcc_codes 整數陣列,列出應啟用這項功能的「我的客戶中心」。
類型:整數陣列
預設值:{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 裝置的 root 殼層中執行,暫時設定此值:

setprop ril.ecclist "$(getprop ril.ecclist),NUMBER_TO_CALL"

即使系統未偵測到印度行動網路或未插入印度 SIM 卡,您也可以使用下列指令強制啟用緊急操作功能。

adb shell settings put global force_emergency_affordance 1

建議您至少測試下列情況:

  • 啟用後,只要長按鎖定畫面上的「EMERGENCY」按鈕 (圖 1),即可撥打指定的緊急電話。
  • 啟用後,全域動作選單上會顯示「緊急電話」項目,輕觸該項目即可撥打指定的緊急電話號碼。
  • 如果未偵測到印度行動網路,且裝有非印度 SIM 卡,則這項功能不會啟用
  • 安裝印度 SIM 卡時,無論偵測到的行動網路為何,這項功能都會在裝置上啟用
  • 無論裝置插入哪張 SIM 卡,只要有印度行動網路,這項功能就會在裝置上啟用

如果裝置支援多個 SIM 卡,測試時應確保 SIM 卡 MCC 偵測功能在每個 SIM 卡插槽中都能正常運作。緊急操作提示功能不受 Android 相容性規範,因此沒有相容性測試套件 (CTS) 測試。

常見問題

問:印度尚未啟用緊急電話號碼 112。是否仍應使用?

112 是印度的緊急電話號碼,用於聯繫公眾安全緊急應變中心 (PSAP),這項服務由整合式緊急通訊和回應系統 (IECRS) 定義。在 PSAP 啟用前,所有撥打至 112 的電話都會轉接至現有的 100 緊急電話號碼 (但這項服務由電信業者負責,而非 Android)。

問:其他觸發事件 (例如三按電源鍵) 呢?

裝置製造商可以實作其他觸發條件。不過,雖然印度 DoT 核准了輕觸硬體電源鍵三下,但 AOSP 參考實作中不支援這項觸發動作,因為某些廣泛使用的應用程式 (例如相機應用程式) 會使用電源鍵手勢,包括重複輕觸電源鍵。這類應用程式可能會干擾緊急電話撥號程式,或是使用者在嘗試觸發這些應用程式中的動作時,不小心觸發緊急按鈕。