As buscas por redes preferenciais de descarga (PNO, na sigla em inglês) do Wi-Fi são buscas 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 buscas PNO são usadas para encontrar e
se conectar a redes salvas. Essas verificações são programadas pelo framework usando o
comando NL80211_CMD_START_SCHED_SCAN
. Para mais informações, consulte nl80211.h.
Otimizar o uso de energia com informações de mobilidade do dispositivo
Em dispositivos com o Android 9 ou versões anteriores, quando o dispositivo é desconectado do Wi-Fi e a tela está desligada, as verificações de PNO ocorrem em intervalos de 20 segundos para as três primeiras verificações e depois diminuem para uma verificação a cada 60 segundos em todas as verificações subsequentes. A verificação de PNO é interrompida quando uma rede salva é encontrada ou a tela é ativada.
O Android 10 apresenta um método de API opcional em WifiManager
, chamado
setDeviceMobilityState()
,
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 desconhecidaDEVICE_MOBILITY_STATE_HIGH_MVMT
: Em uma bicicleta ou em um veículo motorizadoDEVICE_MOBILITY_STATE_LOW_MVMT
: caminhada ou corridaDEVICE_MOBILITY_STATE_STATIONARY
: Não está se movendo
Se o dispositivo estiver parado, o framework do Android aumentará o intervalo entre as verificações de PNO de 60 para 180 segundos para reduzir o consumo de energia. Essa otimização é feita com o pressuposto de que o dispositivo provavelmente não vai encontrar novas redes nas verificações de PNO quando não estiver em movimento.
Se o dispositivo estiver em qualquer outro estado de mobilidade ou se o método não for chamado, ele usará o comportamento de verificação de PNO padrão.
Implementação
Para implementar esse recurso de otimização de energia em um dispositivo com o Android
10 ou mais recente, derive as informações de mobilidade do dispositivo
e chame o método setDeviceMobilityState()
de um app de sistema personalizado.