Como procurar uma rede Wi-Fi preferencial de descarga

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 desconhecida
  • DEVICE_MOBILITY_STATE_HIGH_MVMT: Em uma 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 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.