ユーザーのプライバシーを尊重するため、アプリ デベロッパーはおおよその位置情報の利用許可のみを求めることを推奨します。おおよその位置情報を必要とするアプリは通常、高速でバッテリー消費量が少ないネットワーク ロケーション(FLP)を使用します。
Android ベースのモバイル デバイスと比較すると、車載アプリでのネットワーク ロケーションはより困難な可能性があります。以下の 2 つの Android API を使用できます。
LocationManager API では、優先すべき位置情報プロバイダを明示的に指定する必要があります。
Google Play Services API は、Fused Location Provider(FLP)を使うことで、位置情報を扱うためのより簡潔な方法を提供します。
多くの車載アプリは、LM の代わりに、Google Play 開発者サービス(GPS)API の FLP を使用しています。FLP は、車両が必要とする位置情報リクエスト基準とポリシー(パワーと精度)に基づいて、最適な位置情報プロバイダを選択します。
代わりに、明示的にリクエストすることで、LM の NETWORK_PROVIDER
と、詳細な位置のために android.permission.ACCESS_FINE_LOCATION
権限を使用する GPS_PROVIDER
を選択することもできます。API 31 では、以前は GPS API 経由でのみアクセスできた FUSED_PROVIDER
を、LM の位置情報プロバイダとして利用できるようになりました。FusedLocationProvider.java
にて、よりシンプルな FLP の実装をご覧いただけます。
おおよその権限のみで GPS_PROVIDER
を使うことも可能ですが、フレームワークは想定に合わせて人為的に精度を下げます。全体的な可用性が低く、おおよその位置を取得するにも時間がかかることが多いため、Android スマートフォンを対象とするデベロッパーにはあまり有用ではありません。
車載アプリのネットワーク ロケーション
Android スマートフォン(Google モバイル サービス)で使用されている NETWORK_PROVIDER
は、近くの基地局のみにもとづいて位置情報を特定するものから、Wi-Fi アクセス ポイントや、さらには Bluetooth(BT)ビーコンも活用するように変更されました。NETWORK_PROVIDER
の使用には、データ接続が必要な場合があります。
車載アプリの場合、デバイスの制約は異なります。通常、GNSS はオンになっているため、電力およびバッテリー使用量の増加によるペナルティはありません。その結果、IVI の稼働時間は損なわれません。Google のサーバーとのデータ交換を最小限に抑えるよう努めています。
そのため、多くのアプリは LM の代わりに Play API から FLP を直接使用します。FLP は内部で位置情報リクエストの基準とポリシー(すなわち電力と精度)に最も適する位置情報プロバイダを使用して、スマートシングを自動的に行います。
モバイル デバイスとは違い、車両がある場所から別の場所へとジャンプすることはまれです。ほとんどの場合、車両の位置は内部で知ることができます。
ネットワーク ロケーション プロバイダ
ほとんどの車両には、セル 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" />
このアプローチにより、さまざまなカテゴリのデバイスとの互換性が最大限に確保されるため、必要時に位置情報を取得するためのコードが同じものとなり、アプリの可用性が最大化されます。