ロケーションタイムゾーンの検出

Android 12以降で利用可能なロケーションタイムゾーン検出は、デバイスがロケーションとタイムゾーンマップデータを使用してタイムゾーンを決定できるようにするオプションの自動タイムゾーン検出機能です。

ロケーションタイムゾーン検出は、テレフォニータイムゾーン検出の代替メカニズムです。この機能はテレフォニーを必要としないため、この機能は、モバイルテレフォニーデバイスに加えて、さまざまなフォームファクタのデバイスでサポートできます。

ロケーションタイムゾーン検出機能は、AOSPプラットフォームの次のコンポーネントで構成されています。

  • システムサーバーのタイムゾーン検出ロジック。
  • Android 12で導入された[設定]のユーザーアクセス可能なオプション。ユーザーは、テレフォニーとロケーションのタイムゾーン検出メカニズムを選択できます。
  • 位置検出とタイムゾーンマッピングを実行するコンポーネント用のプラグインシステム。プラグインはロケーションタイムゾーンプロバイダー(LTZP)と呼ばれ、デバイス上に最大2つ存在できます。
  • 参照LTZP実装。
  • リファレンス実装で使用できるOpenStreetMapデータからリファレンスデータセットを生成するためのホストツール。

ユーザーのプライバシー

ロケーションタイムゾーンの検出には、次のユーザープライバシー機能が含まれます。

  • ユーザーはいつでもロケーションタイムゾーンの検出をオフにすることができます。
  • 場所から派生したタイムゾーンの提案は、デバイス上のユーザー間で共有されません。
  • ユーザーは、[日付と時刻の設定]画面を使用して、タイムゾーン検出の場所の検出を明示的に制御できます。ユーザーは、権限ダイアログを介して明示的に権限を付与する必要はありません。
  • デバイスの位置情報はAndroidプラットフォームサービスに渡されません。代わりに、次のことが発生します。

    • タイムゾーン検出サービスには、LTZPからのみタイムゾーンIDが送信され、デバイスの場所は送信されません。これは、ロケーションタイムゾーンの検出をサポートするために必要な最小限のAPIです。
    • 個々のLTZPの操作は、システムインテグレーターが決定する必要があります。 LTZPの実装では、Androidデバイスに完全に保持されているタイムゾーンマップデータを使用したり、サーバーを活用したり、ハイブリッドアプローチを使用したりできます。

機能の動作

time_zone_detectorサービスは、検出元から受け取った提案に基づいて、デバイスの現在のタイムゾーンをいつ変更するかを決定します

location_time_zone_managerサービスは、 time_zone_detectorのロケーションの起点に関する提案を生成する役割を果たします。 location_time_zone_managerサービスは、システムサーバープロセスで実行されます。

location_time_zone_managerサービスには、タイムゾーン検出ロジックは含まれていません。これは、ロケーションタイムゾーンプロバイダー(LTZP)と呼ばれる1つまたは2つのプラグインのライフサイクルを管理する役割を果たします。

ロケーションタイムゾーンの検出が不要な場合、LTZPは開始されません。これは、ロケーションタイムゾーン検出システムが、明示的に要求されない限り、LTZPにデバイスのロケーションを追跡するように要求しないことを意味します。この動作の理由には、次のようなものがあります。

  • 通常のテレフォニー操作の一部として受動的に受信されるテレフォニー信号とは異なり、ロケーションはAndroidロケーションプロバイダーからアクティブに要求される可能性があり、追加の電力を消費する可能性があります。
  • 場所の設定はユーザースコープであり、Androidは現在のユーザーの設定を尊重する必要があります。
  • デバイスの位置を取得することはプライバシーに敏感です。

また、 location_time_zone_managerサービスは、ユーザー間で位置情報を共有しないように、現在のユーザーが変更されたときに不確実な提案を行います(必要な場合)。

これらの選択の結果として、現在の起点を場所に切り替えた後、または現在のユーザーを切り替えた後、タイムゾーンが検出されるまでに通常は数秒かかります。これは、使用されているLTZPの実装にも依存します。

AOSPロケーションタイムゾーン検出の実装では、ここで定義されているように、プライマリLTZPとセカンダリLTZPの最大2つのLTZPを使用できます。

プライマリLTZP
ユーザーがロケーションタイムゾーン検出機能の実行を許可した場合は常に実行されます。
二次LTZP
プライマリLTZPがタイムゾーンが不確実であると報告した場合、永続的な障害を報告した場合、または初期化中にタイムアウトした場合に実行されます。プライマリLTZPが特定の提案を送信すると停止します。

図1に示すように、 time_zone_detectorサービスは、テレフォニーまたはロケーションオリジンからタイムゾーンの提案を受信します。ロケーションオリジンは、プライマリまたはセカンダリLTZPから提案を受け取ります。

ロケーションタイムゾーン検出情報フロー

図1.ロケーションタイムゾーン検出情報フロー。

デバイス構成要件

ロケーションタイムゾーン機能をサポートするには、デバイスで使用できるLTZPを使用してデバイスを設定する必要があります。デバイスでは、ロケーションタイムゾーン検出が機能し、[設定]でユーザーに表示されるように、少なくとも1つのLTZPを有効にして構成する必要があります。

デバイス構成

このセクションでは、デバイスメーカーがロケーションタイムゾーン検出をサポートするようにデバイスを構成する方法について説明します。

基本のAOSP構成は、 frameworks/base/core/res/res/values/config.xmlにあります。

構成キーAOSP値説明
config_enableGeolocationTimeZoneDetection trueこれは、ロケーションタイムゾーン検出機能のマスターコントロールです。

この機能は、AOSPでデフォルトでサポートされています。この機能をユーザーが利用できるようにするには、少なくとも1つのLTZPを有効または構成する必要があります。

値をfalseに設定すると、この機能が完全に無効になり、メモリを少し節約できます。
config_enablePrimaryLocationTimeZoneProvider falseこれにより、プライマリLTZPが有効になります。
config_primaryLocationTimeZoneProviderPackageNameこれを、プライマリプロバイダーサービスを見つけることができるアプリのパッケージ名に設定します。
config_enableSecondaryLocationTimeZoneProvider falseこれにより、セカンダリLTZPが有効になります。
config_secondaryLocationTimeZoneProviderPackageNameこれを、セカンダリプロバイダーサービスが存在するアプリのパッケージ名に設定します。

デフォルトでは、AOSP構成のconfig_enableGeolocationTimeZoneDetectionキーがtrueに設定されており、ロケーションタイムゾーン検出機能のサポートが有効になっています。 AOSPにはデフォルトでLTZP構成が含まれていないため、この機能は最初はユーザーに表示されません。ただし、このデフォルト構成を使用すると、デバイスメーカーは、テスト用のコマンドラインからLTZPを有効にしてシミュレートできます。 (詳細については、「デバッグとテスト」を参照してください。)

ロケーションタイムゾーンプロバイダーの構成と展開

LTZPを構成するときは、 frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.javaのソースコードの説明をお読みください。 Javadocコメントは、サービス、必要な権限、およびその他の構成に関する詳細を提供します。

ロケーションタイムゾーンプロバイダーを構成するには、デバイスメーカーは、LTZPのサービスをホストするアプリプロセスを選択する必要があります。 LTZP専用のプロセスを持つことは、高いオーバーヘッドです。理想的には、選択されたアプリプロセスは、システムサーバーなど、常に実行されているプロセスです。

モジュラーシステムコンポーネント(モジュール)を備えたデバイスでは、LTZPで使用される地理データとタイムゾーンデータモジュールcom.android.tzdata )で伝送されるタイムゾーンルール(tzdb)との相互作用を考慮してください。一方を更新し、もう一方を更新しないと、バージョンスキューの問題が発生する可能性があります。詳細については、機能の採用に関する考慮事項を参照してください。

AOSPリファレンスロケーションタイムゾーンプロバイダー

AOSPには、 packages/modules/GeoTZの下に参照ロケーションタイムゾーンプロバイダーの実装が含まれています。このリファレンス実装では、AOSP APIを使用してデバイスの場所を特定し、デバイス上のデータファイルを使用して場所を一連のタイムゾーンIDにマッピングします。

他のオープンソースプロジェクトから派生した参照データセットは、ソースコードに含まれています。詳細については、 README.mdおよびさまざまなLICENSEファイルを参照してください。

デバッグとテスト

次のセクションでは、ロケーションタイムゾーン検出機能をデバッグおよびテストするためのシェルコマンドについて説明します。

location_time_zone_managerサービスとのやり取り

Android 12以降を実行しているデバイスでロケーションオリジンがサポートされている場合、Androidは起動時にlocation_time_zone_managerサービスをインスタンス化します。

location_time_zone_managerの現在の状態をダンプするには、次を使用します。

adb shell cmd location_time_zone_manager dump

テストに役立つコマンドラインオプションの広範なセットを表示するには、次を使用します。

adb shell cmd location_time_zone_manager help

ヘルプ出力には、テストまたは本番環境でのtime_zone_detectorの動作に影響を与えるために使用できるdevice_configサービスプロパティも記述されています。詳細については、device_configサービスを使用したデバイスの設定を参照してください。

LTZP実装は、独自のデバッグまたはテストサポートを提供することもできます。たとえば、次のコマンドを使用して、システムサーバープロセスに登録されているAOSPリファレンスLTZPをデバッグできます。

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService