Android Automotive OS での大まかな位置情報

ユーザーのプライバシーを尊重するため、アプリ デベロッパーはおおよその位置情報の利用許可のみを求めることを推奨します。おおよその位置情報を必要とするアプリは通常、高速でバッテリー消費量が少ない融合型ネットワーク ロケーション(FLP)を使用します。 Android ベースのモバイル デバイスと比較すると、車載アプリでのネットワーク ロケーションはより困難な可能性があります。以下の 2 つの Android API を使用できます。

  • LocationManager API では、優先すべき位置情報プロバイダを明示的に指定するために requestLocationUpdates を 使用する必要があります。

  • Google Play 開発者サービス API は、 位置情報を扱うためのより簡単な方法をFusedLocationProviderClient提供します。

多くの車載アプリは、LocationManager の代わりに Google Play 開発者サービス API の FLP を使用しています。FLP は、車両が必要とする位置情報リクエスト基準とポリシー(パワーと精度)に基づいて、最適な位置情報プロバイダを選択します。

代わりに、明示的にリクエストすることで、NETWORK_PROVIDER と、詳細な位置のためにandroid.permission.ACCESS_FINE_LOCATION 権限を使用するGPS_PROVIDERを選択することもできます。Android 12(API レベル 31)以上では、FUSED_PROVIDER, 以前は Google Play 開発者サービス API 経由でのみアクセスできた を、LocationManagerの位置情報プロバイダとして利用できるようになりました。FLP の実装については、FusedLocationProvider.java をご覧ください。

おおよその権限のみで GPS_PROVIDER を使うことも可能ですが、フレームワークは想定に合わせて人為的に精度を下げます。全体的な可用性が低く、おおよその位置を取得するにも時間がかかることが多いため、Android スマートフォンを対象とするデベロッパーにはあまり有用ではありません。

車載アプリのネットワーク ロケーション

Android スマートフォン(Google モバイル サービス)で使用されている NETWORK_PROVIDER は、近くの基地局、Wi-Fi アクセス ポイント、Bluetooth(BT)ビーコンに基づいて位置情報を特定します。そのため、NETWORK_PROVIDER にはデータ接続が必要になることがあります。

車載アプリの場合、デバイスの制約は異なります。通常、全地球航法衛星システム(GNSS)はオンになっているため、電力およびバッテリー使用量の増加によるペナルティはありません。その結果、IVI の稼働時間は損なわれません。 Google のサーバーとのデータ交換を最小限に抑えるよう努めています。

多くのアプリは、LocationManager の代わりに Play API から FLP を直接使用します。FLP は、リクエストの基準またはポリシー(電力や精度など)を満たす最適な位置情報プロバイダを自動的に選択するためです。

モバイル デバイスとは違い、車両がある場所から別の場所へとジャンプすることはまれです。 ほとんどの場合、車両の位置は内部で知ることができます。

ネットワーク ロケーション プロバイダ(NLP)

ほとんどの車両には、セル ID(およびシグナル強度)に関する必要な情報を得るために必須のテレフォニー API が実装されていません。その結果、データ使用量を最小限に抑えるため、NLP の追加の機能実装は提供されていません。

Fused Location Provider

モバイル FLP は、ネットワーク プロバイダと GPS プロバイダを使用するだけでなく、他のセンサーからの情報を融合して位置情報の品質を高めます。一方、Automotive FLP は GPS_PROVIDER を基礎となるソースとして使用します。クライアントがおおよその位置情報をリクエストすると、GNSS の位置を調整し、意図的に誤差を加えて精度を下げます。

そのため、ごくまれに、最初の位置情報が利用可能になるまでに通常より時間がかかる場合があります。たとえば、車両、より正確に言えばその位置情報サブシステムが初めて使用されるとき、もしくは牽引された後などです。

モバイルや車載での利用を目的としたアプリを設計する

適合率において高い精度を求めないモバイル デバイスと車載デバイスを対象とするアプリは、android.permission.ACCESS_COARSE_LOCATIONのみをリクエストし、利用可能であれば FLP を使用してフォールバックすることをおすすめします。または、同じ権限で GPS_PROVIDER を直接使用します。このフレームワークは、API の想定に合わせるために、基礎となる GNSS の位置の適合率を低下させます。詳しくは、位置情報の利用許可のリクエストの精度 をご覧ください。

さらに、これらのアプリは、マニフェストで android.hardware.location.network機能をオプションとして明示的に宣言しなければなりません。例:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

このアプローチにより、さまざまなフォーム ファクタのデバイスとの互換性が高まり、必要時に位置情報を取得するためのコードが同じものとなり、アプリの可用性が最大化されます。