時刻の概要

このページでは、Android での時刻とタイムゾーンの検出方法を説明します。これには、Android で自動的に時刻とタイムゾーンを検出する仕組み、デバイス メーカーの設定オプション、テスト情報が含まれます。

時刻とタイムゾーンの概要

Android では、ステータスバーなどの場所に表示するユーザーの現地時刻を特定するため、次の 2 つの関連する独立した状態を追跡しています。

  • 現在の Unix エポック時刻
  • 現在のタイムゾーン

現在の Unix エポック時刻と現在のタイムゾーンはデバイス全体の状態です。つまり、デバイスのすべてのユーザー間で共有されます。

現在の Unix エポック時刻は固定値ではありません。時間の経過を反映して自動的に更新されます。デバイスの現在の Unix エポック時刻は、通常の時間経過に加えて、デバイスの電源が切れた後などに正しくないことが判明した場合に調整されます。

現在のタイムゾーンによって、現在の Unix エポック時刻を現地時刻に変換するための調整量が決まります。たとえば、夏のロサンゼルスでは、現在の Unix エポック時刻から 7 時間を差し引き、冬には 8 時間を差し引きます。

こうした現地時刻の計算をサポートするため、すべての Android デバイスには、すべてのグローバル タイムゾーン ルールのデータベースが保持されています。タイムゾーン ルールの詳細については、タイムゾーン ルールをご覧ください。

ユーザーが別のタイムゾーンを使用している場所に移動した場合、現在の Unix エポック時刻は調整する必要がありませんが、通常は以前の場所の時刻ではなく現地時刻の表示が求められます。現在のタイムゾーンを変更すると、新しい場所の正しい現地時刻を表示するために、現在の Unix エポック時刻に正しいオフセットが適用されます。

AOSP では、以下のメカニズムで時刻とタイムゾーンを自動的に設定するかどうかをユーザーが独立に制御できます。

  • 時刻の自動検出: デバイスの現在の Unix エポック時刻を正しい時刻に合わせます。
  • タイムゾーンの自動検出: デバイスの現在のタイムゾーンを正しいタイムゾーンに設定します。

時刻の自動検出

ここでは、時刻の自動検出、ユーザー コントロール、設定オプション、テストの詳細を管理する time_detector サービスの概要を説明します。

time_detector サービス

Android 10 以降を搭載したデバイスにある time_detector サービスは、時刻の自動検出を管理します。時刻の自動検出が有効になっているときに、必要に応じてデバイスの現在の Unix エポック時刻を調整します。

常に time_detector サービスは、「確定」(certain)か「不確定」(uncertain)かのどちらかの状態にあります。サービスが確定状態になるか不確定状態になるかは、さまざまなソースから受け取る時刻の提案によって決まります。

time_detector サービスが確定状態にあるとき、つまり Unix エポック時刻の情報で提案を受け取っているとき、時刻の提案が現在の Unix エポック時刻と異なっている場合は、現在の Unix エポック時刻がオーバーライドされます。

time_detector が不確定状態であるときには、現在時刻はオーバーライドされません。不確定状態は、通常、time_detector サービスが時刻の提案を受け取っていないことを意味します。また、time_detector サービスは、受け取った提案が古すぎて使用できないと見なされた場合でも不確定状態になります。提案の新しさが考慮されるのは、古い Unix エポック時刻の提案を使用する調整がリアルタイム クロックに依存しており、リアルタイム クロックは時間が経過すると不正確になると想定されるためです。

デバイスで現在の Unix エポック時刻を自動的に設定するために使用できるソースにはさまざまなものがあります。このドキュメントでは、これらのソースを「オリジン」と呼びます。time_detector サービスは、一連の提案をそのオリジンに基づき別個のものとして扱います。

time_detector サービスはステートフルです。つまり、各オリジンが行った最新の提案が記録されます。オリジンに新しい Unix エポック時刻の情報がある場合、time_detector に新しい提案が行われます。time_detector サービスは、提案を受け取ると、新しい提案と既存の提案を再評価してデバイスの状態を更新します。

UTC 時刻は世界的に認められたものですが、Android デバイスで現在の Unix エポック時刻を設定するのは必ずしも簡単なことではありません。

  • Unix エポック時刻は、UTC 時刻とは微妙に異なる時間管理システムです。両者間での変換には、うるう秒がいつ発生し、それがオリジンでどう扱われるかを把握している必要があります。
  • オリジンは特定の時間や状況でのみ利用できます。たとえば、オリジンにネットワーク接続が必要な場合、利用できるのはデバイスがインターネットに接続されている間だけです。
  • オリジンが間違っている場合、精度が悪い場合、誤差がある場合があります。たとえば、テレフォニーの基地局が「世界時」を正しく追跡していない場合、テレフォニー オリジンが不正確な時刻を提案します。
  • Unix エポック時刻の取得中に誤差が発生することがあります。たとえば、ネットワークの遅延、バッファリング、プロセス スケジューリングが原因で、Unix エポック時刻が不正確になる場合があります。
  • 提案を受け取ってから経過した時間で補正するために使用する基準時計が正確でない可能性があります。

AOSP でデフォルトで使用されるように設定されている主な時刻検出オリジンには、次の 2 つがあります。

  • テレフォニー: NITZ(ネットワーク ID とタイムゾーン)のテレフォニー信号を使用します。
  • ネットワーク: NTP(ネットワーク タイム プロトコル)のタイムサーバーを使用します。

テレフォニー オリジンとネットワーク オリジンは、どちらも外部ネットワークへの接続を必要としますが、接続は常にあるわけではありません。

Android 12 以降では、以下のオリジンもサポートされています(デフォルトでは使用するように設定されていません)。

  • GNSS: GPS 位置情報プロバイダを使用して、GNSS ソースから時刻を取得します。
  • 外部: デバイス メーカーが Unix エポック時刻の独自のソースを統合できるようにする汎用オリジン。

時刻の設定

ユーザーは、AOSP の設定アプリの [システム] > [日時] で自動時刻検出を有効にできます。

設定画面の自動時刻検出

図 1. 設定画面の自動時刻検出

次の表は、AOSP 設定アプリの時刻検出に対するユーザー コントロールを示しています。

*Android 11 以前では、この設定に [ネットワークから提供された時刻を使用する] というラベルが表示されます。

AOSP 設定の場所 AOSP 設定の名前 範囲 動作
[システム] > [日時] 日時を自動的に設定 * すべてのユーザー

切り替え。

オンの場合、デバイスが現在の Unix エポック時刻を検出します。オフの場合、デバイスの時刻を手動で設定するためのコントロールが表示されます。

ユーザーが手動で時刻を入力する場合は、Unix エポック時刻ではなく現地時刻を入力します。現在の Unix エポック時刻は、現在のタイムゾーンを使って算出されます。

設定

デバイス メーカーは、使用するオリジンやオリジンからの信号の優先度など、さまざまな設定を time_detector サービスに行います。

オリジンの優先度

Android 12 以降では、デバイス メーカーが core/res/res/values/config.xml 設定ファイルを変更して、自動時刻検出に含める時刻オリジンと、time_detector がこれらのオリジンを考慮する優先度を指定できます。

Android 11 以前を搭載したデバイスでは、オリジンの優先度は ["telephony", "network"] にハードコードされています。つまり、ネットワークの提案よりもテレフォニーの提案が優先されます。

デフォルトの AOSP 設定は次のとおりです。

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

Android 12 では、デフォルトで使用するオリジンとして、ネットワークの提案とテレフォニーの提案が設定されています。ネットワークの時刻提案は、テレフォニーの時刻提案よりも優先されます。デバイス メーカーは、テレフォニーの優先度が高い Android 11 以前の動作に戻すために、オリジンの順序を変更できます。

デフォルトでは、優先度が最も高い有効な提案が、デバイスの現在のシステム クロック時刻と数秒以内で一致する場合も、デバイス時刻は変更されません。これは、ACTION_TIME_CHANGED インテントを受信待機するインストール済みのアプリに処理を発生させないようにするためです。

指定できるオリジンの値は次のとおりです。

下限時刻

Android 12 では、time_detector サービスで受け取った時刻の提案の検証に使用される下限時刻が導入されています。下限時刻の値はビルド タイムスタンプから設定されます。これは、有効な時刻はデバイスのシステム イメージをビルドした時刻より前にはならないという原則に基づいています。 時刻の提案が下限時刻よりも前の場合、ビルド タイムスタンプが正しい限りそれは有効ではないため、time_detector サービスはその提案を破棄します。

Android 11 以前を搭載しているデバイスの場合、time_detector サービスは、受け取った Unix エポック時刻の提案を検証しません。

Android では上限時刻は適用されません。

時刻のデバッグとテスト

ここでは、time_detector サービスと、すべてのオリジンで共有される他のコンポーネントの動作のデバッグとテストを行う方法について説明します。

time_detector サービスとのやり取り

time_detector サービスの設定と time_detector サービスの状態を表示するには、次のコマンドを使用します。

adb shell cmd time_detector dump

タイムゾーン検出のデバッグとテストを行うためのその他のコマンドを確認するには、次のコマンドを使用します。

adb shell cmd time_detector help

ヘルプ出力には、テスト用と製品版の time_detector の動作に影響を与える device_config サービス プロパティについても説明されています。詳細については、device_config サービスを使用したデバイスの設定をご覧ください。

自動時刻検出を検証するには、テスターが time_detector サービスで使用されているオリジンを認識している必要があります。以下に adb shell cmd time_zone_detector dump コマンドからの出力例を示します。現在のオリジンとサービスの状態に関する情報を太字にしています。

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

この情報は以下のように解釈できます。

キー
mEnvironment.isAutoTimeDetectionEnabled() 自動時刻検出が有効かどうか。
mEnvironment.autoTimeLowerBound() 時間提案の検証に使われる現在の下限。
mEnvironment.autoOriginPriorities() 使用中のオリジンと優先順位。

時間変更ログは、time_detector サービスがデバイスの現在の Unix エポック時刻を変更した場合を示しています。

提案の履歴情報は各オリジンが行った提案を示しています。

タイムゾーンの自動検出

ここでは、タイムゾーンの自動検出、設定ページのユーザー コントロール、テレフォニーと位置情報によるタイムゾーン検出、テストの詳細を管理する time_zone_detector サービスの概要を説明します。

time_zone_detector サービス

Android 11 以降を搭載したデバイスにある time_zone_detector サービスは、タイムゾーンの自動検出を管理します。タイムゾーンの自動検出が有効になっているときに、必要に応じてデバイスの現在のタイムゾーンを調整します。

タイムゾーンの自動検出が有効になっているとき、time_zone_detector は確定状態(certain)か不確定状態(uncertain)かのどちらかの状態にあります。

time_zone_detector サービスが確定状態にあるときは、time_zone_detector サービスが強いタイムゾーン情報を受け取ったことを意味します。これにより、現在のタイムゾーンがオーバーライドされる可能性があります。不確定状態にあるときは、情報を受け取っていないか、信頼度の低い情報しか受け取っていないことを意味します。この場合、現在のタイムゾーンはオーバーライドされません。

time_zone_detector サービスの確定状態には、time_zone_detector で使用するタイムゾーン情報がない状態と、複数のタイムゾーンから選択できる状態があります。具体的には以下のような状態です。

  • タイムゾーンがない確定状態は、デバイスがタイムゾーンのない場所(公海や紛争地域など)にあるときに発生します。この状態は不確定状態に似ていますが、time_zone_detector がタイムゾーンを特定するのにそれ以上のアクションを必要としないことを示します。
  • 複数のタイムゾーンがある確定状態は、曖昧さや境界条件がある場所で発生します。この状態では、現在のタイムゾーンが time_zone_detector で確定しているタイムゾーンのいずれかである場合、現在のタイムゾーンのままとなります。そうでない場合は、使用可能なタイムゾーンのいずれかが使用されます。これにより、ユーザーが以前にタイムゾーンを手動で選択した場合や、デバイスが境界に近づいたときでも、time_zone_detector は基本的に安定したものとなります。

time_zone_detector サービスの状態が確定状態か不確定状態かは、オリジンから受け取るタイムゾーンの提案によって決まります。

通常、提案には time_zone_detector の状態(確定と不確定)にほぼ一致する 2 つの種類があります。提案の種類の例を次に示します。

  • type = "uncertain", zoneIds = []

    • オリジンでタイムゾーンが把握されていない。
  • type = "certain", zoneIds = ["Europe/London"]

    • オリジンでは、ゾーンは「Europe/London」だと確定している。
  • type = "certain", zoneIds = []

    • オリジンは確定状態だが、現在地に関連付けられたゾーン ID はない。
  • type = "certain", zoneIds = ["America/Denver", "America/Phoenix"]

    • オリジンでは、「America/Denver」と「America/Phoenix」のどちらかが答えだと確定しているが、どちらかを選ぶことはできない。

time_zone_detector サービスは、一連の提案をそのオリジンに基づき別個のものとして扱います。オリジンによっては、オリジンの確定の度合いを示すメタデータが提案に含まれる場合があります。

time_zone_detector サービスはステートフルです。つまり、各オリジンが行った最新の提案が記録されます。以前の提案が正しくなくなった場合、つまり、オリジンに別の提案が追加された場合や、オリジンがタイムゾーンを検出できなくなった場合、新しい提案が time_zone_detector サービスに送信されます。time_zone_detector サービスは、提案を受け取ると、新しい提案と既存の提案を再評価してデバイスの状態を更新します。

Android は、タイムゾーン検出に以下の 2 つのオリジンをサポートしています。

  • テレフォニー
  • 位置情報

time_zone_detector サービスがタイムゾーンの決定に使用するオリジンは 1 つだけです。位置情報のオリジンがデバイスでサポートされている場合、使用する現在のオリジンは、ユーザーが設定したタイムゾーンの設定に基づいて決まります。現在のオリジンでタイムゾーンが不確定状態になった場合、time_zone_detector は別のオリジンからの提案を使用しません。現在のオリジン以外のオリジンに関連付けられた提案は、time_zone_detector によってメモリ内に保持される可能性はありますが、現在のオリジンが変更されない限り使用されません。ユーザーがタイムゾーンの自動検出の設定を変更し、現在のオリジンが変更されると、新しいオリジンで利用可能な最新の提案が使用されます。

Android 13 以降を搭載したデバイスでは、time_zone_detector サービスはテレフォニー フォールバック モードをサポートします。このモードでは、位置情報による検出でタイムゾーンを検出できない場合や、位置情報によるタイムゾーンの検出がテレフォニーによる検出より時間がかかる場合、Android は一時的にテレフォニーによる検出の提案を使用します。

テレフォニー フォールバック モードは、テレフォニーによる検出と位置情報による検出の両方がサポートされていて、ユーザーがタイムゾーンの設定[タイムゾーンの設定に位置情報を使用] を有効にしているデバイスに適用されます。このモードは、デバイスを再起動したときと機内モードを解除したときに、自動的に有効になります。テレフォニー フォールバック モードが有効になっているとき、time_zone_detector サービスは、位置情報のオリジンが確定的な提案を行うまでは、位置情報による検出が無効になっている場合と同様にテレフォニーの提案を使用します。確定的な提案を受け取ると、テレフォニー フォールバック モードは無効になり、位置情報の提案が排他的に使用されます。

テレフォニー フォールバック モードの設定の詳細については、タイムゾーン検出の設定をご覧ください。

タイムゾーンの設定

ユーザーは AOSP の設定アプリで、タイムゾーンの自動検出を有効にして設定することができます。

設定画面の自動タイムゾーン検出

図 2. 設定画面の自動タイムゾーン検出

次の表は、AOSP 設定アプリにあるタイムゾーン検出のユーザー コントロールを示しています。

*Android 11 以前では、この設定に [ネットワークから提供されたタイムゾーンを使用する] というラベルが表示されます。

AOSP 設定の場所 AOSP 設定の名前 範囲 動作
[システム] > [日時] タイムゾーンを自動的に設定 * すべてのユーザー

切り替え。

オンの場合、デバイスが現在のタイムゾーンを検出します。オフの場合、デバイスのタイムゾーンを手動で設定するためのコントロールが表示されます。

[システム] > [日時] タイムゾーンの設定に位置情報を使用 現在のユーザー

切り替え。

Android 12 以降で利用できます。この切り替えは、デバイスで位置情報によるタイムゾーン検出がサポートされている場合にのみ表示されます。

位置情報 位置情報の使用 現在のユーザー

切り替え。

デバイスの位置情報を使用することを広く許可または禁止します。値は、位置情報によるタイムゾーン検出がデバイスでサポートされている場合に関連します。

以下に、タイムゾーン検出がデバイスでどのように動作するかの概要を、ユーザーが選択した設定ごとに示します。

  • [日時] タイムゾーンを自動的に設定: オフ

    • ユーザーがタイムゾーンを手動で選択する必要があります。
  • [日時] タイムゾーンを自動的に設定: オン

    • [位置情報] 位置情報を使用: オフ

      • テレフォニー信号がタイムゾーンの検出に使用されます(下記の注をご覧ください)。
    • [位置情報] 位置情報を使用: オン

      • [日時] タイムゾーンの設定に位置情報を使用: オン

        • タイムゾーンの検出に位置情報が使用されます。
      • [日時] タイムゾーンの設定に位置情報を使用: オフ

        • テレフォニー信号がタイムゾーンの検出に使用されます(下記の注をご覧ください)。

マルチユーザーのデバイス

関係する設定の一部が現在のユーザーを対象範囲とするため、現在のユーザーがマルチユーザーの Android デバイスで変更されたときに、タイムゾーン検出の動作が変わります。

[タイムゾーンの設定に位置情報を使用] の切り替えの対象範囲は現在のユーザーに限定されており、デバイス ポリシーによって制限されません。つまり、[タイムゾーンを自動的に設定] の切り替えがオフになっているか、Device Policy Controller によって他の時刻またはタイムゾーンのコントロールが制限されている場合でも、ユーザーは常にその値を変更できます。

自動検出に切り替えた場合と手動検出に切り替えた場合の動作

ユーザーがタイムゾーンの検出を手動から自動に切り替えたとき、time_zone_detector ですでに現在のタイムゾーンを確定されている場合があります。その場合、ユーザーが自動検出を有効にすると、time_zone_detector サービスによる評価に合わせてデバイスのタイムゾーンも同時に変更されることがあります。

同様に、ユーザーが設定画面で time_zone_detector サービスの現在のオリジンを変更するような変更を加えたとき、time_zone_detector は新しいオリジンの提案をすでに受け取っているため、デバイスの時刻が time_zone_detector サービスによる評価に合わせてすぐに変更されます。

テレフォニーによるタイムゾーン検出

テレフォニーによるタイムゾーン検出では、テレフォニー信号を使用して現在のタイムゾーンを特定します。詳細については、テレフォニーによるタイムゾーン検出をご覧ください。

位置情報によるタイムゾーン検出

位置情報によるタイムゾーン検出は、Android 12 以降で利用できます。これは、オプションの自動タイムゾーン検出機能であり、デバイスが位置情報を使用して現在のタイムゾーンを特定できるようにするものです。

Android 12 で導入された location_time_zone_manager サービスは、システム サーバーで実行され、time_zone_detector サービスに位置情報のオリジンの提案を送信するコードが含まれています。詳細については、位置情報によるタイムゾーン検出をご覧ください。

機能の導入に関する考慮事項

ここでは、デバイス メーカーがデバイスにこの機能を採用するかどうかを判断する際に役立つ、位置情報によるタイムゾーン検出機能の性質について説明します。

テレフォニーによる検出と位置情報による検出の比較

次の表は、タイムゾーンの検出にテレフォニー信号ではなく位置情報を使用した場合のメリットとデメリットを比較したものです。

テレフォニーによる検出 位置情報による検出
正確性 国によって異なります。

MCC、NITZ の正確性と提供状況によって異なります。
機能の設定やプラグインのコンポーネントによって異なります。

正確性は通常、次の要因で違ってきます。
  • 位置情報プロバイダの精度と定期性。
  • タイムゾーン マップデータの品質。
更新可能性 テレフォニーによる検出は、更新可能な Time Zone Data モジュール(com.android.tzdata APEX)に含まれるファイルに依存します。 機能の設定やプラグインのコンポーネントによって異なります。

更新可能性は通常、デバイスがサーバーとクライアントのどちらのタイムゾーン マップデータを使用するかによって異なります。

注: タイムゾーン マップデータは、Android の TZDB とその他のタイムゾーン情報の更新に使用される Time Zone Data モジュールには含まれません。

また、デバイス メーカーは、タイムゾーン ルールとタイムゾーン マップデータのバージョンの整合性も考慮する必要があります。
電力消費量 ゼロか少ない ユーザーの位置情報の設定、使用されているプラグインに加えて、通常は位置情報を要求する他のアプリによっても異なります。
可用性 テレフォニー デバイスのみ。通常は正常な SIM が必要です。 位置情報による検出は、利用可能な位置情報プロバイダによって異なります。
ユーザーのプライバシー

通常、ユーザーに好まれるタイムゾーンは、ユーザーの地理的位置によって決まります。位置情報はセンシティブ データです。ユーザーは、タイムゾーンの検出の一環として位置情報が共有されているかどうかに関心があります。タイムゾーンの検出とは無関係に、デバイスで動作しているすべてのアプリは、Android の権限を必要とせずにデバイスの現在のタイムゾーンを読み取ることができます。そして、アプリはこの情報からデバイスの現在位置を不正確ながら推測できます。

さらに具体的には、タイムゾーンの検出には受動的手段と能動的手段があります。

  • 受動的手段: デバイスの環境内のどこかから、その環境で使用するタイムゾーンがデバイスに通知されます。
  • 能動的手段: デバイスは、自身でタイムゾーンを割り出する必要があるため、ユーザーのプライバシー設定と同意に応じてデバイスの位置情報を取得します。その後、外部サービスと位置情報を共有できます。ユーザーのプライバシーと同意の詳細については、下記の説明をご覧ください。

テレフォニーのオリジンを使うような受動的な検出では、ユーザーに対するプライバシーの影響はそれ以上ありません。

位置情報のオリジンを使うような能動的な検出では、デバイスの現在地を特定します。これには、ユーザーが同意しない可能性があります。また、タイムゾーン ID を確定するためにネットワークで位置情報を送信することもあります。

タイムゾーン検出に関して Android で取られているユーザーのプライバシーに対するアプローチにより、ユーザーはアクティブになると考えられるオリジンを個別に無効にできます。また、AOSP プラットフォームのコードでは、位置情報自体を直接処理しません。位置情報の検出と、位置情報とタイムゾーン ID のマッピングは、デバイス メーカーが設定したプラグイン コンポーネントに任せられます。

ユーザーのプライバシーに関する機能の詳細については、位置情報によるタイムゾーン検出をご覧ください。

設定

デバイス メーカーは、time_zone_detector サービスが動作を変更するように設定できます。このセクションでは、time_zone_detector サービスの一般的な動作に関する設定オプションについて説明します。テレフォニーおよびタイムゾーン検出のオリジンの設定の詳細については、テレフォニーによるタイムゾーン検出位置情報によるタイムゾーン検出をご覧ください。

基本 AOSP 設定は frameworks/base/core/res/res/values/config.xml にあります。

設定キー AOSP 値 説明
config_supportTelephonyTimeZoneFallback true true の場合、time_zone_detector はテレフォニー フォールバック モードを使用します。このキーは Android 13 以降に存在します。

タイムゾーンのデバッグとテスト

ここでは、time_zone_detector サービスと、すべてのオリジンで共有される他のコンポーネントの動作のデバッグとテストを行う方法について説明します。

device_config サービスを使用したデバイスの設定

device_config サービスは、通常は独自の(AOSP 以外の)コードによってリモート サーバーから取得される値を使用して、変更可能な動作の設定を行うために Android で使用される仕組みです。テストに device_config の値を使用するとき(特に長時間にわたる手動テストの場合)、デバイスがフラグを同期することがあります。これにより、フラグがリセットされて、テストのために設定した値がクリアされる可能性があります。

Android 12 以降でフラグの同期を一時的に停止するには、次のコマンドを使用します。

adb shell cmd device_config set_sync_disabled_for_tests persistent

テスト後にフラグの同期を元に戻すには、次のコマンドを使用します。

adb shell cmd device_config set_sync_disabled_for_tests none

フラグの同期を元に戻したら、デバイスを再起動します。

詳細については、$ adb shell cmd device_config help を使用してください。

time_zone_detector サービスとのやり取り

time_zone_detector の設定と time_zone_detector サービスの状態を表示するには、次のコマンドを使用します。

adb shell cmd time_zone_detector dump

タイムゾーン検出のデバッグとテストを行うためのその他のコマンドを確認するには、次のコマンドを使用します。

adb shell cmd time_zone_detector help

ヘルプ出力には、テスト用と製品版の time_zone_detector サービスの動作に影響を与える device_config サービス プロパティについても説明されています。詳細については、device_config サービスを使用したデバイスの設定をご覧ください。

タイムゾーンの検出を検証するには、テスターが time_zone_detector で使用されているオリジンを認識している必要があります。time_zone_detector の現在のオリジンを把握し、これに影響を与えるには、次のいずれかを行います。

  • 設定 UI で視覚的に確認します。詳しくは、タイムゾーンの設定をご覧ください。
  • adb でコマンドラインを使用します。

    • time_zone_detector の状態をダンプするには、adb shell cmd time_zone_detector dump を使用します。
    • デバイスの設定を変更するには、time_zone_detector の他のコマンドを使用します。詳細については、adb shell cmd time_zone_detector help を使用してください。

以下に adb shell cmd time_zone_detector dump コマンドからの出力例を示します。現在のオリジンとサービスの状態に関する情報を太字にしています。

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

この情報は以下のように解釈できます。

キー
mUserConfigAllowed Device Policy Controller によって、ユーザーが日時を設定することの制御を禁止するかどうか。
mTelephonyDetectionSupported デバイスにテレフォニーによるタイムゾーン検出の機能があるかどうか。
mGeoDetectionSupported デバイスに位置情報によるタイムゾーン検出の機能があるかどうか。これは、設定と、少なくとも 1 つの LTZP が存在することに基づいた実効的な状態です。
mAutoDetectionEnabled タイムゾーンの自動検出が有効かどうか。
mLocationEnabled マスターの位置情報の切り替え。
mGeoDetectionEnabled オリジンのスイッチ: 「false」はテレフォニーのオリジンを示し、「true」は位置情報のオリジンを示します。

提案の履歴情報は、各オリジンが設定ページ(手動)で行った提案と、テレフォニーのオリジンと位置情報のオリジンで行った提案を示しています。