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.