緊急時アフォーダンスの実装

2017 年 1 月 1 日以降、インドで販売されるすべてのモバイル デバイスには、インド電気通信局(DoT)の要件を満たすためにパニックボタンが搭載されています。これらの規制要件に対応するために、Android には、Android デバイスでパニックボタンを有効にする緊急時アフォーダンス機能のリファレンス実装が含まれています。

この機能は、Android 8.0 以降のリリースではデフォルトで有効になっていますが、それ以前のリリースでは既存のビルドにパッチを適用する必要があります。現在、この機能はインド市場で販売されているデバイスのみを対象としていますが、インド以外の国でもデバイスに影響を与えることがないため、世界中で販売されているすべてのデバイスに搭載されています。

例とソース

緊急時アフォーダンス機能は、Android オープンソースプロジェクト(AOSP)フレームワーク / ベースプロジェクトに実装されています。この機能は、master ブランチでの利用が可能で、Android 8.0 以降のリリースではデフォルトで有効になっています。

現在、この機能は次のブランチとコミットで使用できます。この情報は、既存のビルドに対する変更をデバイス メーカーが簡単にパッチできるようにするために提供しています。AOSP リファレンスの緊急時アフォーダンス機能を実装するデバイス メーカーは、該当するブランチからのコミットを独自のビルドに手動で選択することができます。

表 1. AOSP リファレンスの緊急時アフォーダンス機能のチェリーピック

ブランチ コミット
master e0c3c66 緊急時アフォーダンス機能を追加
42a4338 緊急時アクション文字列の翻訳を追加
4df8d64 緊急時アフォーダンスがタブレットに表示される問題を修正
nougat-dev e6680d9 緊急時アフォーダンス機能を追加
95e1865 緊急時アクション文字列の翻訳を追加
a70bb89 緊急時アフォーダンスがタブレットに表示される問題を修正
marshmallow-dev cd22634 緊急時アフォーダンス機能を追加
13f51c6 緊急時アクション文字列の翻訳を追加
6531666 緊急時アフォーダンスがタブレットに表示される問題を修正
lollipop-mr1-dev 5fbc86b 緊急時アフォーダンス機能を追加
1b60879 緊急時アクション文字列の翻訳を追加
d74366f 緊急時アフォーダンスがタブレットに表示される問題を修正

実装

緊急時アフォーダンス機能によって、Android ソフトウェア開発キット(SDK)を通じて公開される API が変更されることはありません。この機能を有効にすると、112 への緊急通報を発信できる 2 つのトリガーが提供されます。112 はインドの DoT 規制によって義務付けられた、インドで統一して使用される緊急番号です。

緊急通報は次のいずれかの方法によって開始します。

ロック画面の [緊急通報] ボタン
を長押し
グローバル アクション メニューの
[緊急通報] オプションをタップ
緊急通報ボタン
図 1. ロック画面の [緊急通報] ボタン。
緊急オプション
図 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 を提供します。この機能を有効にする必要がある場合、EmergencyAffordanceManager は緊急通報の発信やランタイムでの照会を行うメソッドを提供します。

  • void performEmergencyCall()。緊急通報を開始します。
  • boolean needsEmergencyAffordance()。この機能を有効にするかどうかを指定します。

ビルド時に EmergencyAffordanceManager.ENABLED の定数を false に変更することで、この機能を永続的に無効にすることができます。この設定により、needsEmergencyAffordance() は常に false を返し、EmergencyAffordanceService が起動しなくなります。

EmergencyAffordanceService

EmergencyAffordanceService は、検出されたすべてのモバイル ネットワークのモバイル カントリー コード(MCC)および挿入されている SIM カードの MCC を監視するシステム サービスです。挿入されている SIM カードまたは検出されたモバイル ネットワークのいずれかに、インドの MCC(404 または 405)のいずれかに一致する MCC がある場合、この機能が有効になります。このことは、インド国内では SIM カードがなくてもこの機能が有効になることを意味します。SIM カードが挿入されていない場合でも、モバイル ネットワークで緊急通報の発信ができるようになっています。この機能は、インド用ではない SIM が挿入され、検出されたネットワーク上に一致する MCC がない場合、無効になります。

設定タイプが以下の場合、次のリソースと設定は緊急時アフォーダンス機能の動作に影響します。

  • リソース: 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 である場合)。

緊急時アフォーダンス機能を使用するデバイス メーカーは、インド国内のデバイスが常に 112 を RIL で緊急番号として有効にするように設定する必要があります。

検証

発信する番号は、デバッグ可能なビルドでのテスト中に次のコマンドで変更できます。

    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 MCC 検出が正しく機能することを確認する必要があります。緊急時アフォーダンス機能は Android の互換性に左右されないため、互換性テストスイート(CTS)によるテストはありません。

よくある質問

Q. 緊急番号 112 はインドではまだ開始されていませんが、使用する必要はありますか?

統合緊急通信および応答システム(IECRS)で定義されるように、112 はインド国内で緊急応答機関(PSAP)として使用される番号です。PSAP が開始されるまで、112 への発信はすべて既存の 100 の緊急番号に転送されます(ただし、これについては Android ではなく携帯通信会社が責任を負います)。

Q. 電源ボタンを 3 回押すなど、他のトリガーはありますか?

デバイス メーカーは、追加のトリガーを実装することもできます。ただし、インド国内の DoT はハードウェアの電源ボタンのトリプルタップを承認していますが、一般的に使用される一部のアプリ(カメラ アプリなど)では電源ボタンの繰り返しタップを含む電源ボタン ジェスチャが使用されているため、このトリガーは AOSP リファレンス実装ではサポートされていません。このようなアプリによって緊急通報が妨げられたり、ユーザーがアクションをトリガーしようとしてパニックボタンを誤作動させてしまう可能性があります。