Como procurar uma rede Wi-Fi preferencial de descarga

As verificações de descarga de rede Wi-Fi preferencial (PNO, na sigla em inglês) são de baixa potência e que ocorrer em intervalos regulares quando um dispositivo estiver desconectado do Wi-Fi e o que a tela esteja desligada. As verificações da PNO são usadas para encontrar e conectar a redes salvas. Essas verificações são agendadas pelo framework usando NL80211_CMD_START_SCHED_SCAN. Para mais informações, consulte nl80211.h.

Otimize o uso de energia com informações sobre mobilidade do dispositivo

Em dispositivos com o Android 9 ou versões anteriores, estiver desconectado do Wi-Fi e a tela estiver desligada, as buscas por PNO ocorrem aos 20 segundos para as três primeiras verificações e, depois, desacelerar para uma a cada 60 segundos. para todas as verificações subsequentes. A busca por PNO é interrompida quando uma rede salva é encontrada ou que a tela esteja ligada.

O Android 10 introduz um método de API opcional chamado setDeviceMobilityState() em WifiManager que aumenta o intervalo entre As verificações de PNO são baseadas no estado de mobilidade do dispositivo para reduzir o consumo de energia.

Os possíveis estados de mobilidade 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 estacionário, o framework do Android aumentará a intervalo entre as buscas por PNO de 60 a 180 segundos para reduzir o consumo de energia e consumo. Essa otimização é feita com base na suposição de que o dispositivo está é improvável que encontre novas redes nas verificações da PNO quando o dispositivo não está em movimento.

Se o dispositivo estiver em qualquer outro estado de mobilidade ou se o método não for chamado, o dispositivo usa o comportamento padrão de busca da PNO.

Implementação

Para implementar esse recurso de otimização de energia em um dispositivo com Android 10 ou mais recente, derivar as informações de mobilidade do dispositivo e chamar o método setDeviceMobilityState() em um app personalizado do sistema.