web-dev-qa-db-ja.com

融合位置プロバイダーは良い選択ですか?

融合型位置情報プロバイダーを使用したいアプリケーションを開発しています。しかし、私はいくつかの疑問といくつかの質問があります。

  1. GPSがオフで、優先度をHIGHに設定した場合、それはGPSが自動的にオンになるかどうかを意味しますか?
  2. バッテリーを少なくとも少し節約するために、UpdateLocationにFUSEDプロバイダーを高い優先度で設定できますか?
  3. フューズドプロバイダーが使用しているもの(GPSまたはネットワークプロバイダー)を知るにはどうすればよいですか?そして最後に
  4. 融合プロバイダーは本当にAndroid場所に最適ですか?それについて否定的な点はありますか?

あなたの意見は何ですか?前もって感謝します。

6
Atenica

GPSがオフで優先度をHIGHに設定した場合、それはGPSが自動的にオンになるかどうかを意味しますか?

いいえ、自動的にはオンになりません。ただし、SettingsApiを使用する場合、ユーザーにダイアログを表示し、GPSをオンにする必要があるという情報を提供します。ユーザーが同意すると、gpsは自動的にアクティブになります。チェック SettingsApi

フューズドプロバイダーが使用しているもの(GPSまたはネットワークプロバイダー)を知る方法

融合プロバイダーAPIとSettingsApiを適切に使用する場合。現在の場所のリクエストに必要な設定を適切に行います。

融合プロバイダーは本当にAndroid場所に最適ですか?それについて否定的な点はありますか?

私の意見では、Fusedプロバイダーの前に直接プロバイダー(Gps、ネットワーク)を処理する必要がありますが、Fusedは「どのくらい正確な位置を受信したいですか?」

7
blackkara

ここにあるように https://developer.Android.com/training/location/index.html は、Google Play開発者サービスの場所APIがAndroidフレームワークよりも優先されることを明確に述べています位置認識をアプリに追加する方法としての位置API(Android.location)。現在AndroidフレームワークのロケーションAPIを使用している場合は、できるだけ早くGoogle Play開発者サービスのロケーションAPIに切り替えることを強くお勧めします。だから、あなたがあなたの答えを得たことを願っています。

5

Gps、Wifi、融合型位置プロバイダーのテストアプリケーションを作成し、2日間テストしました。両方を使用するため、ほとんどの場合、最も正確です。また、Gpsデータはジッターを引き起こす非常にノイズの多いデータです。このローパスフィルターを解決するために、他のフィルターが使用されます。最も正確な結果を得るために使用される最も成功したフィルターの1つはカルマンフィルターです。 FusedLocationProviderは、ハードウェアとソフトウェアを組み合わせた融合センサーであるRotationVectorと同じこのフィルターを使用します。 RotationVectorは、加速度計、ジャイロスコープ(利用可能な場合)、および磁場センサーを使用して、位置データと方位角データを取得およびフィルター処理します。

LocationManagerを使用したGpsのLocation.getProviderは「gps」を返し、Wifiは「network」を返し、FusedLocationProviderは「fused」を返します。

GPSがオフで優先度をHIGHに設定すると、GPSが自動的にオンになるかどうか

「バッテリー節約」以外は、可能であればGpsをオンにします。この設定はmy Android 7.1.1電話で利用できます。場所の設定は、以前のバージョンのAndroidユーザー側では異なりました。Gpsの使用を有効にする開発者としてmLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);を設定する必要があります

PRIORITY_HIGH_ACCURACY-この設定を使用して、可能な限り正確な位置をリクエストします。この設定では、位置情報サービスがGPSを使用して位置を特定する可能性が高くなります。

優先順位を設定すると、バッテリーの使用レベルも決まります。

バッテリーを少なくとも少し節約するために、UpdateLocationにFusedプロバイダーを高い優先度で設定できますか?

はい、優先度に加えて位置リクエストの間隔を設定できます。

mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);

Fusedプロバイダーが使用しているもの(GPSまたはネットワークプロバイダー)を知るにはどうすればよいですか?

WifiからのLocationがLocation.hasSpeed()に対してtrueを返すことはありませんが、屋外にいる場合、Gpsはほとんど常にtrueを返します。また、location.getExtras()には、GPSでのみ使用可能な衛星を確認できる衛星タグがあります。あなたが歩いているか、私がこれまで読んだ限り、速度は正しくない可能性があります。車でこれを試していません。速度が5 km/h未満の場合は、あまり正確ではありません。 FLPを使用していて、最後の位置データに速度情報が含まれている場合、それは間違いなくGpsからのものです。

それについて何か悪い点はありますか?

Android 8.0以上の場合)l ococion retrieving limit Foreground Serviceを使用しない場合、またはアプリがFLPとLocationManager。

また、FLPではGooglePlayServiceがユーザーのデバイスで利用可能である必要があり、特定のバージョン以上である必要があります。使用するものに応じて10または11。 Google Play開発者サービスを禁止している中国などの国でアプリを公開する場合、これは問題になる可能性があります。

4
Thracian

既存の答えは言いません理由 FusedLocationProviderの方が優れています。

APIは、インテリジェントでバッテリー節約の方法で、より多くのデータソース(センサー、wifi、コンテキスト、履歴)から融合するため、優れています。また、Googleはデータソースを追加することで常に改善しています。アプリがそれを使用する場合、それらの改善は無料で得られます。

2
Mark Lu