Wi-Fi-bevorzugtes Netzwerk-Offload-Scannen

Wi-Fi Preferred Network Offload (PNO)-Scans sind Wi-Fi-Scans mit geringem Stromverbrauch, die in regelmäßigen Abständen durchgeführt werden, wenn ein Gerät vom Wi-Fi getrennt und der Bildschirm ausgeschaltet ist. PNO-Scans werden verwendet, um gespeicherte Netzwerke zu finden und eine Verbindung zu ihnen herzustellen. Diese Scans werden vom Framework mithilfe des Befehls NL80211_CMD_START_SCHED_SCAN geplant. Weitere Informationen finden Sie unter nl80211.h .

Optimierung des Stromverbrauchs mit Informationen zur Gerätemobilität

Wenn auf Geräten mit Android 9 oder niedriger die WLAN-Verbindung getrennt und der Bildschirm ausgeschaltet ist, werden PNO-Scans in den ersten drei Scans in 20-Sekunden-Intervallen durchgeführt. Bei allen folgenden Scans erfolgt dann ein Scan alle 60 Sekunden. Der PNO-Scan stoppt, wenn ein gespeichertes Netzwerk gefunden wird oder der Bildschirm eingeschaltet wird.

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

Die möglichen Mobilitätszustände 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 : Bewegt sich nicht

Wenn das Gerät stationär ist, erhöht das Android-Framework das Intervall zwischen PNO-Scans von 60 Sekunden auf 180 Sekunden, um den Stromverbrauch zu senken. Diese Optimierung erfolgt unter der Annahme, dass das Gerät in PNO-Scans wahrscheinlich keine neuen Netzwerke findet, wenn das Gerät nicht bewegt wird.

Befindet sich das Gerät in einem anderen Mobilitätsstatus oder wird die Methode nicht aufgerufen, verwendet das Gerät das standardmäßige PNO-Scanverhalten.

Implementierung

Um diese Leistungsoptimierungsfunktion auf einem Gerät mit Android 10 oder höher zu implementieren, leiten Sie die Gerätemobilitätsinformationen ab und rufen Sie die Methode setDeviceMobilityState() aus einer benutzerdefinierten System-App auf.