As buscas por rede preferencial de descarga (PNO) do Wi-Fi são buscas de baixa potência que
ocorrem em intervalos regulares quando um dispositivo está desconectado do Wi-Fi e a
tela está desligada. As buscas por PNO são usadas para encontrar e
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 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, em seguida, diminuem para uma verificação a cada 60 segundos para todas as verificações subsequentes. A verificação de PNO é interrompida quando uma rede salva é encontrada ou a tela é ativada.
O Android 10 introduz um método de API opcional chamado
setDeviceMobilityState()
em WifiManager
que aumenta o intervalo entre
as buscas por 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
: De 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 vai aumentar o intervalo entre as buscas de PNO de 60 para 180 segundos para reduzir o consumo de energia. Essa otimização é feita com base na premissa de que o dispositivo provavelmente não encontrará novas redes em 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 padrão de verificação de PNO.
Implementação
Para implementar esse recurso de otimização de energia em um dispositivo com Android
10 ou mais recente, derive as informações de mobilidade do dispositivo
e chame o método setDeviceMobilityState()
de um app do sistema personalizado.