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ätDEVICE_MOBILITY_STATE_HIGH_MVMT
: Auf einem Fahrrad oder in einem KraftfahrzeugDEVICE_MOBILITY_STATE_LOW_MVMT
: Gehen oder LaufenDEVICE_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.