Como procurar uma rede Wi-Fi preferencial de descarga

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 desconhecida
  • DEVICE_MOBILITY_STATE_HIGH_MVMT: De bicicleta ou em um veículo motorizado
  • DEVICE_MOBILITY_STATE_LOW_MVMT: Caminhada ou corrida
  • DEVICE_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.