4

ブール値フラグが true に設定されている場合、アプリケーションはバックグラウンドでサービスの更新を要求します。フラグが true に設定されている場合PARTIAL_WAKE_LOCK、バックグラウンド サービスを実行するために を取得します。私の質問は次のとおりです。

  • ロケーションマネージャーに更新を要求したので (手動で更新を要求するのではなく、サブスクライブしましたlocationManager.requestLocationUpdates)... デバイスがスリープ状態になった場合でも、locationManager は通常どおり/通常どおり動作し続けPARTIAL_WAKE_LOCKますか?

  • WifiLock -> WIFI_MODE_SCAN_ONLY取得していないがあることを読みました。ロケーション マネージャーは Wi-Fi スキャンを使用して Wi-Fi ホットスポットを介して位置を検出するため、これも取得する必要がありますか?

  • デバイスがスリープ状態になったときの GPS 位置情報の更新はどうなりますか?

4

2 に答える 2

5
  1. いいえ、違います。可能な解決策/ハックを含む、詳細な(非常に良い)情報はこちら。

  2. 1に関しては、知識に基づいた推測をして、違いはないと言わなければなりません

  3. 私が収集できることから、更新に使用しているプロバイダーに違いはありませLocationManager.NETWORK_PROVIDERLocationManager.GPS_PROVIDER

少しOQになる危険があるので、サービスをまったく実行し続けるために、どの種類のアプリケーションがウェイクロックを取得する必要があるのか​​ 少し興味があります。私の知る限り、wake lock を使用しても、Service実行を継続できるわけではありません。Serviceが実行され続けることを保証する唯一のことは、それをフォアグラウンド ( Service.startForeground()) に置くことです。そうしないと、wake lock を取得したかどうかに関係なく、システムがサービスを強制終了する可能性があります。そうは言っても、それが実行されている場合、それはHandler何かで動作することができます。

このアプローチを使用していて、シナリオに基づいていると思われる場合は、使用しないことをお勧めします。基本的に、サービスを作成し、フォアグラウンドで実行し (推測)、画面がオフのときに位置情報の更新を要求するためだけにウェイクロックを取得しています。これは少しやり過ぎのようです。

Handler.postAtTimeorの恐ろしいタイミングよりもはるかに正確なタイミングによる利点がある、より効率的な方法がありHandler.postDelayedますAlarmManager.setRepeating()。type を ELAPSED_REALTIME_WAKEUP または RTC_WAKEUP に設定して、デバイスがスリープ状態になったときに実行されるようにします。次に、アラーム イベントが発生し、BroadcastReceiver作成する必要がある によって受信されたときに、更新を要求して他のイベントを処理できます。

を使用しておらず、Handler単に位置情報の更新を要求している場合でも、このアプローチの方がおそらく優れているでしょうService

そして、LocationManager.addProximityAlert()ここに行く方法のようです。これにも欠陥があります(1を参照)

ところで、同様の質問: Android: 携帯電話がスリープ状態のときに GPS 位置情報が更新されますか?

于 2012-08-22T01:37:24.350 に答える
0

Nexus 6でAndroid 6.0を使用して、ロックされた画面でWiFiとセルベースの場所を取得しようと何日も費やしました。デバイスがロックされても、10 ~ 15 分間位置更新イベントを収集した後、位置更新の提供を停止します。

私の場合、解決策はネイティブ Android 位置情報サービスから com.google.android.gms.location と呼ばれる Google Play Services ラッパーに切り替えることでした: https://developers.google.com/android/reference/com/google/android/gms /場所/パッケージ概要

はい、一部の Android デバイスには GMS がないことはわかっていますが、私のアプリケーションではこれが唯一の解決策です。

バックグラウンドでデバイス画面がロックされている場合でも、位置情報の更新の送信を停止しません。

個人的には、このサービスをストリームにラップする RxJava ライブラリを好みます (例を含む): https://github.com/mcharmas/Android-ReactiveLocation

于 2016-08-24T13:27:51.307 に答える