これは、位置情報の更新を受信するためにアプリを登録する方法です。
mLocationRequest = LocationRequest.create();
mLocationRequest.setInterval(Consts.ONE_MINUTE * 10);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setFastestInterval(Consts.ONE_MINUTE);
Builder builder = new GoogleApiClient.Builder(context);
builder.addApi(ActivityRecognition.API);
mGoogleApiClient = builder.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
....
....
@Override
public void onConnected(Bundle connectionHint) {
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationUpdatespendingInent);
}
私の保留中のインテントは、ほぼ正確に要求された間隔でバックグラウンドで呼び出されました...
ここまでは順調ですね。
問題: WIFI が無効になっている/ネットワークに接続されていない場合、または 3G/4G ネットワーク データが有効になっていない場合 - 融合された位置情報プロバイダーが新しい位置情報の更新を提供しない!!
位置情報アクセス設定がオンになり、GPS 衛星と WI-FI & モバイル ネットワークの位置情報がチェックされます。
さらに大きな問題:その場合、保留中のインテントを介して位置情報の更新のコールバックを受信することがありますが、それが最後に認識した位置 (1 時間前であっても、その場所から何マイルも離れていたとしても)
のドキュメントによるとPRIORITY_BALANCED_POWER_ACCURACY
:
「ブロック」レベルの精度を要求するために setPriority(int) とともに使用されます。ブロック レベルの精度は、約 100 メートルの精度と見なされます。このような粗い精度を使用すると、多くの場合、消費電力が少なくなります。
融合された位置プロバイダーは、他に選択の余地がない場合に GPS を開くか、少なくとも新しい位置情報の更新がない場合は提供しないことを期待しています。
別の予測不可能で気がかりな問題:
それがどのように動作するかを確認するために変更PRIORITY_BALANCED_POWER_ACCURACY
しました(24時間)。PRIORITY_HIGH_ACCURACY
すべての間隔は同じままでした (更新間の間隔は 10 分)。ネットワーク/SIMカードのない電話でも正確な位置情報を受信しましたが、バッテリーがすぐに消耗しました! バッテリーの履歴を見てみると、GPS電波がずっとフル送信モードになっていてビックリ!!! また、10 分ごとに位置情報を要求したにもかかわらず、1 分ごとに位置情報が受信されたこともログで確認しました (GPS を開いて位置情報を受信するアプリは他にインストールされていません..)
いくつかのデバイス (Moto X 2013、HTC One X、Nexus 5 など) でこの動作に気付きました。すべて最新の Google Play サービス (バージョン 6.1.11) と android KITKAT 4.4.4 を搭載しています。
私のアプリケーションは、ユーザーの現在の場所に大きく依存し、ユーザーがログインしている限り、指定された間隔で定期的に場所の更新を受信PRIORITY_HIGH_ACCURACY
するため、バッテリーの消耗を防ぐためにモードを使用したくありません..
私の質問:
更新を受信するように設定されて
PRIORITY_BALANCED_POWER_ACCURACY
いて、WI-FIまたはセルタワーの情報がない場合、融合されたロケーションプロバイダーはGPSを使用することを想定していますか?もしそうなら、私は何が間違っていますか?
正しくない、誤解を招くような現在地の更新情報が表示されるのはなぜですか? (「さらに大きな問題」セクションで説明したように..
PRIORITY_HIGH_ACCURACY
パラメータを使用したときに、GPS ラジオが 10 分間隔で開かれるのではなく、常に開かれるのはなぜですか? (位置情報の更新をより速くトリガーするアプリを他にインストールしていません..)