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 varreduras são programadas 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 é desconectado do Wi-Fi e a tela está desligada, as varreduras PNO ocorrem em intervalos de 20 segundos para as três primeiras varreduras e, em seguida, diminuem para uma varredura a cada 60 segundos para todas as varreduras subsequentes. A digitalização PNO é interrompida quando uma rede salva é encontrada ou a tela é ligada.
O Android 10 apresenta um método API opcional denominado setDeviceMobilityState()
no WifiManager
que aumenta o intervalo entre as varreduras de 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 em um veículo motorizado -
DEVICE_MOBILITY_STATE_LOW_MVMT
: Caminhada ou corrida -
DEVICE_MOBILITY_STATE_STATIONARY
: Sem movimento
Se o dispositivo estiver estacionário, a estrutura do Android aumenta o intervalo entre as varreduras de PNO de 60 segundos para 180 segundos para reduzir o consumo de energia. Essa otimização é feita com base no pressuposto de que é improvável que o dispositivo encontre novas redes nas varreduras PNO quando o dispositivo não estiver se movendo.
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()
de um aplicativo de sistema personalizado.