ユーザーが残量を使い果たした際のデバイス動作をカスタマイズする

データ通信量が残っていない 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;

注: 携帯通信会社が独自のスタンドアロン アプリを実装している場合は、このセクションで説明したシグナル以外のシグナルのサポートを実装できます。独自のアクションを定義して設定することもできます。

デフォルトのシグナルとアクションのマッピング

次のプロセスに沿ってデフォルトのアクションを設定します。

  1. サポートされているシグナルのキーを定義します。

    デフォルトのシグナルとアクションのマッピングは 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";
  2. デフォルトのアクションをシグナルのキーに関連付けます。

    デフォルトのアクションの 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
             });
    

    電話通信フレームワークによって、これらのアクションが対応するシグナルにマッピングされます。

デフォルトのアクションのオーバーライド

携帯通信会社の設定 XML ファイルでサポートされるシグナルのカスタム アクションを定義するには、アクション ID をシグナルのキー(CarrierConfigManager.java で定義)に関連付けます。たとえば、次のマッピングでは従量制 APN を無効化し、リダイレクトに関するポータル通知を表示します。

<string-array name="carrier_default_actions_on_redirection_string_array" num="2">
            <item value="1" />
            <item value="4" />
</string-array>

電話通信フレームワークは、これらの設定を読み込んでデフォルトのアクションをオーバーライドします。

検証

この機能を対象とした CTS、CTS 検証ツール、または GTS テストはありません。

次の手動検証テストで機能を検証してください。

  1. 通信会社のデバイスの残量不足シグナル通知を検証する。
  2. 残量不足の状態で Wi-Fi がオフになっているときのトラフィック リダイレクト制限を確認する。
  3. 残量不足時にネットワーク トラフィックが拒否されて、通知 UI が表示されることを確認する。
  4. 残量不足の状態で音声通話と VoLTE 機能を検証する。
  5. 残量不足時にビデオ通話がブロックされることを確認する。
  6. Wi-Fi がオンになっている場合はウェブ ブラウジングを続行でき、残量不足の間はブラウジング トラフィックによってネットワーク トラフィックが有効化されないことを確認する。
  7. 残量不足の状態で Wi-Fi、WFC、Bluetooth の各機能を検証する。
  8. Wi-Fi をオフにする。残量不足通知 UI の表示と、通常のブラウジング トラフィックが通信会社登録ウェブサイトにリダイレクトされないことを確認する。通知 UI のリンクをクリックすると、ブラウザが通信会社登録ウェブサイトに移動することを確認する。
  9. 機内モードを切り替えてもトラフィック制限状態がリセットされないことを確認する。
  10. 現在の SIM を交換するとネットワーク トラフィックの状態がリセットされることを確認する。
  11. 残量不足の SIM を再挿入すると、トラフィック リダイレクトが再開され、ネットワーク トラフィック制限が再度行われることを確認する。
  12. スマートフォンを再起動すると、リダイレクトが再度有効になり、トラフィック制限が復活して通知 UI が再表示されることを確認する。
  13. 「captiveportal」通知をタップして、ユーザーがクレジットを追加できるように、制限付きのネットワーク接続が確立されていることを確認する。
  14. SIM 残量の補充または再開によってモバイル ネットワーク トラフィックが復旧し、通信会社のリンクと残量不足の通知が表示されなくなることを確認する。
  15. データサービス復旧後に健全性テストを行う。

デフォルトのアプリには、単体テストとこれを実行するスクリプトの例が用意されています(tests/runtest.sh を参照)。カスタマイズしたバージョンまたは動作を実装する場合は、これらのカスタマイズを専用の単体テストに反映させる必要があります。