As varreduras de descarregamento de rede preferencial (PNO) de Wi-Fi são varreduras de Wi-Fi de baixa potência que ocorrem em intervalos regulares quando um dispositivo é desconectado do Wi-Fi e a tela está desligada. As varreduras PNO são usadas para localizar e conectar-se a redes salvas. Essas verificações são agendadas pela estrutura usando o comando NL80211_CMD_START_SCHED_SCAN
. Para obter mais informações, consulte nl80211.h .
Otimizando o uso de energia com informações de mobilidade do dispositivo
Em dispositivos com Android 9 ou inferior, quando o dispositivo está desconectado do Wi-Fi e a tela está desligada, as varreduras PNO ocorrem em intervalos de 20 segundos nas três primeiras varreduras e, em seguida, diminuem para uma varredura a cada 60 segundos em todas as varreduras subsequentes. A varredura PNO é interrompida quando uma rede salva é encontrada ou a tela é ligada.
O Android 10 introduz um método API opcional chamado setDeviceMobilityState()
no WifiManager
que aumenta o intervalo entre verificações PNO com base no estado de mobilidade do dispositivo para reduzir o consumo de energia.
Os possíveis estados de mobilidade são:
-
DEVICE_MOBILITY_STATE_UNKNOWN
: mobilidade desconhecida -
DEVICE_MOBILITY_STATE_HIGH_MVMT
: Em uma bicicleta ou veículo motorizado -
DEVICE_MOBILITY_STATE_LOW_MVMT
: Caminhando ou correndo -
DEVICE_MOBILITY_STATE_STATIONARY
: Sem movimento
Se o dispositivo estiver parado, a estrutura do Android aumenta o intervalo entre as varreduras PNO de 60 segundos para 180 segundos para reduzir o consumo de energia. Essa otimização é feita supondo que é improvável que o dispositivo encontre novas redes nas varreduras PNO quando o dispositivo não estiver em movimento.
Se o dispositivo estiver em qualquer outro estado de mobilidade ou se o método não for chamado, o dispositivo usará o comportamento de varredura PNO padrão.
Implementação
Para implementar esse recurso de otimização de energia em um dispositivo com Android 10 ou superior, obtenha as informações de mobilidade do dispositivo e chame o método setDeviceMobilityState()
em um app de sistema personalizado.