Monitorar o status da conectividade e a medição da conexão

Você pode usar o ConnectivityManager se estiver conectado à Internet e determinar o tipo dessa conexão.

Determinar se há uma conexão à Internet

Não é possível executar uma atualização com base em um recurso da Internet se não houver conexão com a internet. A maneira recomendada de agendar tarefas que exigem conexão de Internet é usar WorkManager. Para saber mais, consulte Agendar tarefas com o WorkManager. Você também pode usar o método mostrado no snippet a seguir para consultar a rede ativa de forma interativa para determinar se há conexão de internet.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();
    

Observação: o getActiveNetworkInfo() teve o uso suspenso no Android 10. Use NetworkCallbacks para apps que segmentam o Android 10 (API de nível 29) e versões posteriores.

Determinar o tipo de conexão de Internet

Também é possível determinar o tipo de conexão de Internet disponível no momento.

A conectividade do dispositivo pode ser oferecida por dados móveis, WiMAX, Wi-Fi e conexões Ethernet. Ao consultar o tipo de rede ativa, conforme mostrado no exemplo de código a seguir, você pode modificar o comportamento do seu app com base na largura de banda disponível.

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val isMetered = cm.isActiveNetworkMetered()
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isMetered = cm.isActiveNetworkMetered();
    

Observação: se seu app for direcionado para o Android 5.0 (API nível 21) ou posterior, use ConnectivityManagerCompat.isActiveNetworkMetered em vez de ConnectivityManager.isActiveNetworkMetered().

Os custos de dados móveis tendem a ser significativamente mais altos do que os custos de Wi-Fi e Ethernet. Quando houver uma conexão limitada, tente reduzir o consumo de dados do seu app ou até mesmo atrasá-lo até que haja uma conexão ilimitada.