5

GPSプロバイダーを使用してバックグラウンドで長時間位置の更新を取得する必要があるAndroidアプリに取り組んでいるため、ユーザーがそれを操作しなくなったときに位置の更新が発生する必要があります。LocationManager の requestSingleUpdate (プロバイダー、pendingIntent バージョン) と requestLocationUpdates (プロバイダー、minTime、minDistance、インテント バージョン) を比較して、独自のテストを行いました。私の Droid Razr HD でかなりの量のデータを取得した後、requestLocationUpdates を使用する方が requestSingleUpdate よりもはるかに信頼性が高いようです (両方の方法で、報告された GPS 位置と実際の位置を実際に比較しました。つまり、報告された精度を使用せず、requestLocationUpdates私の実際の位置が大幅に正確になっただけでなく、しかし、requestSingleUpdate オプションを使用した場合よりもはるかに頻繁に、現在の時刻と同じ位置修正時刻が返されました)。繰り返しアラームで AlarmManager を使用して requestSingleUpdate を呼び出す方法を知っているので、アラームが鳴るたびにウェイクロックを保持するだけで済みますが、requestLocationUpdates を使用することで精度が向上したためです (少なくとも私の電話でのテストでは)。代わりにその方法を使用したいと考えています。私の問題は、 requestLocationUpdates メソッドを使用する場合、ユーザーが電話を操作していないときに更新を維持するためにウェイクロックを保持するという点で何をしなければならないかが本当に不明であることです。サービスから起動された別のスレッドから requestLocationUpdates を呼び出しています (それが標準パターンであると読みました)。私の質問は、位置情報を更新し続けるために、ずっとウェイクロックを保持しておく必要がありますか? 自分のウェイクロックを取得できない場合、位置情報の更新が継続して行われ、新しい更新ごとに電話が起動しますか? これが正しい場合、これらの更新は独自のウェイクロックを作成しますか? また、そうである場合、いつウェイクロックを解放しますか? これについては明確な答えが見つからないようです。どんな助けでも大歓迎です。

4

2 に答える 2

3

いいえ、OS がウェイクロックを取得するため ( code ) 、ウェイクロックは必要ありません。ウェイクロックは、終了時またはブロードキャスト レシーバーがインテントを受信したときに解放されonLocationChange()ます (インテント バージョンのインターフェイスの場合)。onLocationChange()たとえば、他のスレッドで非同期作業を開始する場合は、独自のウェイクロックが必要です。

于 2014-06-16T17:57:44.783 に答える
0

離陸と着陸を認識するために数秒ごとに更新する必要があるフライト ログ アプリを作成しました。受信したデータはサービスで評価されます。サービスを維持するには、WakeLock が必要です。検出器 (関連するイベントを自動的に認識する) が開始されたときにロックを取得し、ユーザーが検出器をオフにするとロックを解除します。これはサービスの存続時間でもあるため、ロックは onCreate で取得され、onDestroy で解放されます。電力を節約するために SCREEN_DIM_WAKE_LOCK を使用します。

于 2013-11-09T11:44:59.463 に答える