lightbulb_outline Please take our October 2018 developer survey. Start survey

Determinar e monitorar o status da conectividade

Alguns dos usos mais comuns para a repetição de serviços de alarme e atualizações é agendar atualizações regulares de dados de aplicativo de recursos da Internet, dados de cache ou executar downloads de execução longa. Mas, se você não estiver conectado à Internet ou se a conexão for lenta demais para concluir o download, por que acordar o dispositivo para agendar a atualização?

Use o ConnectivityManager para verificar se há realmente uma conexão à Internet e, se houver, qual é o tipo de conexão existente.

Determinar se há uma conexão à Internet

Não há necessidade de agendar uma atualização com base em um recurso da Internet se não houver uma conexão à Internet. O snippet a seguir mostra como usar o ConnectivityManager para consultar a rede ativa e determinar se ela tem conectividade com a internet.

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

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

Determinar o tipo da conexão à Internet

Também é possível determinar o tipo de conexão à 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 como mostrado abaixo, você pode alterar a taxa de atualização com base na largura de banda disponível.

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

Custos de dados móveis tendem a ser significativamente mais altos do que Wi-Fi. Assim, na maioria dos casos, a taxa de atualização do aplicativo deve ser inferior durante conexões móveis. Da mesma forma, downloads de tamanho significativo devem ser suspensos até que haja uma conexão Wi-Fi.

Após desativar as atualizações, é importante ouvir as mudanças na conectividade para continuar após uma conexão à Internet ser estabelecida.

Monitorar alterações na conectividade

O ConnectivityManager transmite a ação CONNECTIVITY_ACTION ("android.net.conn.CONNECTIVITY_CHANGE") sempre que os detalhes da conectividade mudam. Você pode registrar um receptor de transmissão no manifesto para ouvir essas mudanças e continuar (ou suspender) adequadamente as atualizações em segundo plano.

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

Alterações na conectividade do dispositivo podem ser bastante frequentes — essa transmissão é acionada a cada mudança entre dados móveis e Wi-Fi. Como resultado, é uma prática recomendada monitorar essa transmissão somente quando atualizações ou downloads forem suspensos para poder retomá-los. Normalmente, basta verificar a conectividade à Internet antes de começar uma atualização e, se não houver nenhuma, suspender as atualizações futuras até que a conectividade seja restaurada.

Essa técnica requer alternar receptores de transmissão declarados no manifesto, o que é descrito na lição seguinte.