Skanowanie w ramach odciążania wybranej sieci Wi-Fi

Skanowanie PNO (Preferred Network Offload) to skanowanie Wi-Fi o niskim zużyciu energii, które odbywa się w regularnych odstępach czasu, gdy urządzenie jest odłączone od Wi-Fi i ekran jest wyłączony. Skanowanie PNO służy do znajdowania zapisanych sieci i łączenia się z nimi. Te skanowania są planowane przez platformę za pomocą polecenia NL80211_CMD_START_SCHED_SCAN. Więcej informacji znajdziesz w pliku nl80211.h.

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

Na urządzeniach z Androidem 9 lub starszym, gdy urządzenie jest odłączone od Wi-Fi i ekran jest wyłączony, skanowanie PNO odbywa się co 20 sekund przez pierwsze 3 skanowania, a następnie zwalnia do 1 skanowania co 60 sekund w przypadku wszystkich kolejnych skanowań. Skanowanie PNO zatrzymuje się, gdy zostanie znaleziona zapisana sieć lub gdy ekran zostanie włączony.

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

Możliwe stany mobilności:

  • 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: brak ruchu

Jeśli urządzenie jest nieruchome, platforma Androida zwiększa odstęp między skanowaniami PNO z 60 sekund do 180 sekund, aby zmniejszyć zużycie energii. Ta optymalizacja jest oparta na założeniu, że gdy urządzenie się nie porusza, jest mało prawdopodobne, aby podczas skanowania PNO znalazło nowe sieci.

Jeśli urządzenie jest w innym stanie mobilności lub jeśli metoda nie jest wywoływana, urządzenie używa domyślnego zachowania skanowania PNO.

Implementacja

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