As buscas por redes preferenciais de descarga (PNO, na sigla em inglês) de Wi-Fi são buscas de Wi-Fi 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 se conectar a redes salvas. Essas buscas 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 está desconectado do Wi-Fi e a tela está desligada, as buscas por PNO ocorrem em intervalos de 20 segundos nas três primeiras buscas e, em seguida, diminuem para uma busca a cada 60 segundos para todas as buscas subsequentes. A busca por 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: em uma bicicleta ou em um veículo motorizadoDEVICE_MOBILITY_STATE_LOW_MVMT: caminhando ou correndoDEVICE_MOBILITY_STATE_STATIONARY: sem movimento
Se o dispositivo estiver parado, o framework do Android aumentará o intervalo entre as buscas por PNO de 60 segundos para 180 segundos para reduzir o consumo de energia. Essa otimização é feita com a suposição de que o dispositivo provavelmente não encontrará novas redes em buscas por 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 busca por PNO padrão.
Implementação
Para implementar esse recurso de otimização de energia em um dispositivo com o Android 10 ou versões mais recentes, derive as informações de mobilidade do dispositivo e chame o método setDeviceMobilityState() de um app do sistema personalizado.