Suche nach bevorzugtem WLAN-Netzwerkauslag

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 dazu 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

Wenn Geräte mit Android 9 oder niedriger vom WLAN getrennt und der Bildschirm ausgeschaltet ist, werden PNO-Scans bei den ersten drei Scans im 20-Sekunden-Intervall ausgeführt und dann bei allen nachfolgenden Scans auf einen Scan alle 60 Sekunden verlangsamt. Die PNO-Suche wird beendet, wenn ein gespeichertes Netzwerk gefunden wird oder der Bildschirm eingeschaltet wird.

Android 10 führt eine optionale API-Methode namens setDeviceMobilityState() in WifiManager ein, die das Intervall zwischen PNO-Scans basierend auf dem Mobilitätsstatus des Geräts erhöht, um den Stromverbrauch zu reduzieren.

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 standardmäßige PNO-Scanverhalten.

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.