2

アプリが稼働するまで実行されるGPSを使用するアプリを開発しています。私のGPSは5分後にウェイクアップし、位置を取得すると、そのシンボルの点滅が停止し、ほとんどすべてのデバイス(Sony xperia、Samsungタブ、Htc WildFire、Motorola photon)で非表示になりますが、大量のバッテリー電力を消費するMotorolaDefyとSamsungAceでは非表示になります。GPSは修正され、安定して常に表示されるようになります。これらのデバイス(MotoDefyとSamsungAce)のGPSの動作方法は異なります。私のコードを見てください:

long _listenerWakeUpTimeInterval=1000*60*5;**  //5 minutes
_locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, _listenerWakeUpTimeInterval, 300, locationListener);

すべてのデバイスのGPSは5分後にウェイクアップしますが、これら2つのデバイス(MotoDefyとSamsungAce)のGPSは、onLocationChanged(Location loc)300メートルごとにメソッドを呼び出します。これら2つのデバイスでは時間は重要ではありません。私が(車で)速く旅行するとき、この距離は数分(1または2分)でカバーされます。だから私はonLocationChanged(Location loc)メソッドの呼び出しを取得します。そして、これらのデバイスでは、GPSは常に固定され、静的で、可視です。locationManager.removesupdatesGPSが修正されるたびにメソッドを呼び出したくありません。私はこの方法onDestroy()をサービスでのみ計算します。では、これら2つのデバイスのGPSの動作が他のデバイスと異なる理由と、この問題を解決する方法を教えてください。

4

2 に答える 2

2

ドキュメントを読むと、次のように書かれています。

minTime:通知の最小時間間隔(ミリ秒単位)。このフィールドは、電力を節約するためのヒントとしてのみ使用され、位置情報の更新間の実際の時間は、この値よりも大きい場合と小さい場合があります。

したがって、これは単なる提案であり、実装はそれを無視できます。

私の提案は、AlertManager5分ごとにサービスをスケジュールするために使用し、次にサービスペイロードで、を呼び出す単一の修正を要求することrequestSingleUpdateです。これはバッテリーを節約します。欠点は、GPSチップが衛星信号を受信するまでに時間がかかり、良好な状態(Time To First Fix、またはTTFF)では約30秒から1分かかることです。保留中のすべてのリクエストを処理した後、再びコールドになります。したがって、次のサービスの実行では、TTFFは前の反復と同じくらい高くなる可能性があります。(NETWORK_PROVIDERを使用しない限り、精度は低くなります)。

于 2012-05-31T16:03:09.250 に答える
1

私はこの問題の解決策を得ました.gpsを登録するためAlarmManagerに(5分ごとにアラームを繰り返す)を使用してから、Gpsを30秒間実行し、Gpsの登録を解除します。電話がかかってきたonLocationChanged(Location loc)場合は、このメソッドでGpsの登録を解除します。新しい場所を取得できません)30秒後にハンドラーを介してGpsの登録を解除します。Gpsが再び必要になったときも同じプロセスに従います。このようにして、Gpsはサービスが実行されるまでの時間全体ではなく最大30秒動作します。

于 2012-06-05T05:18:37.787 に答える