おおよその位置情報を取得する

ユーザーのプライバシーを尊重するため、アプリ開発者は大まかな位置情報のアクセス許可のみをリクエストすることをお勧めします。おおよその位置を必要とするアプリは、高速で消費電力が少ないネットワーク ロケーション (FLP) を通常使用します。

Android ベースのモバイル デバイスと比較して、車載アプリのネットワーク ロケーションはより困難になる可能性があります。次の 2 つの Android API を使用できます。

多くの自動車アプリは、LM の代わりに Google Play Services (GPS) API の FLP を使用します。 FLP は、車両に必要な位置要求基準とポリシー (出力と精度) に基づいて、最適な位置プロバイダーを選択します。

代わりに、LM でNETWORK_PROVIDER明示的にリクエストして使用することや、 android.permission.ACCESS_FINE_LOCATION権限を使用する細かい位置用のGPS_PROVIDERを選択することもできます。 API 31 では、以前は GPS API 経由でのみアクセスできたFUSED_PROVIDERが、LM の位置プロバイダーとして利用できるようになりました。 FLP のより単純な実装は、 FusedLocationProvider.javaで確認できます。

GPS_PROVIDER大まかな権限のみで使用することは可能ですが、フレームワークは期待に合わせて精度を人為的に低下させます。全体的な可用性が低く、大まかな位置を取得するのに時間がかかることが多いため、Android スマートフォンをターゲットとする開発者にとってはほとんど意味がありません。

自動車内のネットワークの場所

Android フォン (Google モバイル サービス) で使用されるNETWORK_PROVIDER 、近くの携帯電話基地局のみに基づいて位置を特定することから、Wi-Fi アクセス ポイントや Bluetooth (BT) ビーコンも使用するように変更されました。 NETWORK_PROVIDERを使用するには、データ接続が必要な場合があります。

車載アプリの場合、デバイスの制約は異なります。 GNSS は通常オンになっているため、電力とバッテリーの使用量の増加によるペナルティは発生しません。その結果、IVI の稼働時間は損なわれません。当社は、サーバーと交換されるデータを最小限に抑えるよう努めています。

そのため、多くのアプリは、LM ではなく Play API から FLP を直接使用します。FLP は、内部で位置情報リクエストの基準/ポリシー (つまり、電力と精度) を最もよく満たすことができる位置情報プロバイダーを使用して、賢いことを自動的に実行します。

モバイル デバイスとは異なり、車両がある場所から別の場所にジャンプすることはほとんどありません。ほとんどの場合、車両の位置はボンネットの下でわかります。

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

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

融合型位置情報プロバイダー

モバイル 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" />

このアプローチにより、あらゆる業種のデバイスとの互換性が最大限に確保されるため、必要なときに位置を取得するためのコードの違いがなく、アプリの可用性が最大限に確保されます。