Skanowanie przy odciążaniu sieci przez Wi-Fi

Skanowanie preferowanego odciążania sieci Wi-Fi (PNO) to skanowanie Wi-Fi o niskim poborze mocy, które odbywa się w regularnych odstępach czasu, gdy urządzenie jest odłączone od Wi-Fi, a ekran jest wyłączony. Skany PNO służą do wyszukiwania zapisanych sieci i łączenia się z nimi. Skanowania te są zaplanowane przez platformę za pomocą komendy NL80211_CMD_START_SCHED_SCAN . Aby uzyskać więcej informacji, zobacz nl80211.h .

Optymalizacja zużycia energii dzięki informacjom o mobilności urządzenia

Na urządzeniach z systemem Android 9 lub starszym, gdy urządzenie jest odłączone od Wi-Fi i ekran jest wyłączony, skanowanie PNO odbywa się w odstępach 20 sekund w przypadku pierwszych trzech skanów, a następnie jest zwalniane do jednego skanowania co 60 sekund w przypadku wszystkich kolejnych skanów. Skanowanie PNO zatrzymuje się po znalezieniu zapisanej sieci lub włączeniu ekranu.

W systemie Android 10 wprowadzono opcjonalną metodę API o nazwie setDeviceMobilityState() w WifiManager , która zwiększa odstęp między skanami PNO w zależności od stanu mobilności urządzenia, aby zmniejszyć zużycie energii.

Możliwe stany mobilności to:

  • DEVICE_MOBILITY_STATE_UNKNOWN : Nieznana mobilność
  • DEVICE_MOBILITY_STATE_HIGH_MVMT : Na rowerze lub w pojeździe silnikowym
  • DEVICE_MOBILITY_STATE_LOW_MVMT : Chodzenie lub bieganie
  • DEVICE_MOBILITY_STATE_STATIONARY : Nie rusza się

Jeśli urządzenie jest nieruchome, platforma Android zwiększa odstęp między skanami PNO z 60 sekund do 180 sekund, aby zmniejszyć zużycie energii. Optymalizację tę przeprowadza się przy założeniu, że jest mało prawdopodobne, aby urządzenie znalazło nowe sieci podczas skanów PNO, gdy urządzenie się nie porusza.

Jeśli urządzenie znajduje się w innym stanie mobilności lub jeśli metoda nie została wywołana, urządzenie używa domyślnego zachowania skanowania PNO.

Realizacja

Aby zaimplementować tę funkcję optymalizacji zużycia energii na urządzeniu z systemem Android 10 lub nowszym, uzyskaj informacje o mobilności urządzenia i wywołaj metodę setDeviceMobilityState() z niestandardowej aplikacji systemowej.