As verificações de descarregamento de rede preferencial de Wi-Fi (PNO) são verificações 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 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 é desconectado do Wi-Fi e a tela está desligada, verificações de PNO ocorrem em intervalos de 20 segundos para as três primeiras verificações e, em seguida, diminuem para uma verificação a cada 60 segundos para todas as verificações subsequentes. A varredura PNO é interrompida quando uma rede salva é encontrada ou a tela é ligada.
O Android 10 apresenta um método de API opcional chamado setDeviceMobilityState()
no WifiManager
que aumenta o intervalo entre as verificações de PNO com base no estado de mobilidade do dispositivo para reduzir o consumo de energia.
Os estados de mobilidade possíveis 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
: Caminhar ou correr -
DEVICE_MOBILITY_STATE_STATIONARY
: não se move
Se o dispositivo estiver parado, a estrutura do Android aumenta o intervalo entre as verificações de PNO de 60 segundos para 180 segundos para reduzir o consumo de energia. Essa otimização é feita assumindo que é improvável que o dispositivo encontre novas redes em varreduras de 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()
de um aplicativo de sistema personalizado.