ユーザーのプライバシーを尊重するため、アプリ デベロッパーはおおよその位置情報の利用許可のみを求めることを推奨します。おおよその位置情報を必要とするアプリは通常、高速でバッテリー消費量が少ない統合ネットワーク ロケーション(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)以降では、以前は Google Play 開発者サービス API 経由でのみアクセスできた FUSED_PROVIDER を、LocationManager の位置情報プロバイダとして利用できるようになりました。FusedLocationProvider.java で FLP の実装を確認できます。
おおよその権限のみで 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" />
このアプローチにより、さまざまなフォーム ファクタのデバイスとの互換性が最大限に確保されるため、必要時に位置情報を取得するためのコードが同じものとなり、アプリの可用性が最大化されます。