ユーザーのプライバシーを尊重するため、アプリ デベロッパーはおおよその位置情報の利用許可のみを求めることを推奨します。おおよその位置情報を必要とするアプリでは、Fused Network Location(FLP)を使用するのが一般的です。FLP は高速で消費電力が少ないためです。Android ベースのモバイル デバイスと比較すると、車載アプリでのネットワーク ロケーションはより困難な可能性があります。以下の 2 つの Android API を使用できます。
LocationManager API では、
requestLocationUpdates
を使用して優先する位置情報プロバイダを明示的に指定する必要があります。Google Play Services 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
の位置情報プロバイダとして利用できます。FLP の実装は、FusedLocationProvider.java
で確認できます。
GPS_PROVIDER
を、おおまかな権限のみで使用することは可能です(フレームワークは、想定に合わせて人為的に精度を低下させます)。ただし、Android スマートフォンをターゲットとするデベロッパーにとっては、全体的な可用性が低く、おおまかな位置を得るのに時間がかかることが多いため、理にかなっています。
自動車におけるネットワークの位置情報
Google モバイル サービスを搭載した Android スマートフォンで使用される 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" />
このアプローチにより、さまざまなカテゴリのデバイスとの互換性が最大限に確保されるため、必要時に位置情報を取得するためのコードが同じものとなり、アプリの可用性が最大化されます。