Offload-Suche für bevorzugtes WLAN

PNO-Scans (Wi-Fi Preferred Network Offload) sind WLAN-Scans mit geringem Energieverbrauch, die in regelmäßigen Abständen durchgeführt werden, wenn ein Gerät nicht mit dem WLAN verbunden ist und das Display ausgeschaltet ist. Mit PNO-Scans werden gespeicherte Netzwerke gefunden und eine Verbindung zu ihnen hergestellt. Diese Scans werden vom Framework mit dem Befehl NL80211_CMD_START_SCHED_SCAN geplant. Weitere Informationen finden Sie unter nl80211.h.

Energieverbrauch mit Informationen zur Gerätemobilität optimieren

Auf Geräten mit Android 9 oder niedriger werden, wenn die Verbindung zum WLAN getrennt ist und das Display ausgeschaltet ist, die ersten drei PNO-Scans im Abstand von 20 Sekunden durchgeführt. Bei allen nachfolgenden Scans verlangsamt sich das Tempo auf einen Scan alle 60 Sekunden. Die Suche nach öffentlichen WLANs wird beendet, wenn ein gespeichertes Netzwerk gefunden oder das Display eingeschaltet wird.

In Android 10 wird in WifiManager die optionale API-Methode setDeviceMobilityState() eingeführt, mit der das Intervall zwischen PNO-Scans basierend auf dem Mobilitätsstatus des Geräts erhöht wird, um den Stromverbrauch zu senken.

Mögliche Mobilitätsstatus sind:

  • DEVICE_MOBILITY_STATE_UNKNOWN: Unbekannte Mobilität
  • DEVICE_MOBILITY_STATE_HIGH_MVMT: Auf einem Fahrrad oder in einem Kraftfahrzeug
  • DEVICE_MOBILITY_STATE_LOW_MVMT: Gehen oder Laufen
  • DEVICE_MOBILITY_STATE_STATIONARY: Nicht bewegt

Wenn sich das Gerät nicht bewegt, erhöht das Android-Framework das Intervall zwischen PNO-Scans von 60 Sekunden auf 180 Sekunden, um den Stromverbrauch zu senken. Diese Optimierung basiert auf der Annahme, dass das Gerät bei PNO-Scans wahrscheinlich keine neuen Netzwerke findet, wenn es sich nicht bewegt.

Wenn sich das Gerät in einem anderen Mobilitätsstatus befindet oder die Methode nicht aufgerufen wird, verwendet das Gerät das Standard-PNO-Scan-Verhalten.

Implementierung

Wenn Sie diese leistungsoptimierende Funktion auf einem Gerät mit Android 10 oder höher implementieren möchten, müssen Sie die Informationen zur Gerätemobilität ableiten und die setDeviceMobilityState()-Methode aus einer benutzerdefinierten System-App aufrufen.