Eu preciso de detectar se o dispositivo Android está ligado à Internet.
A classe NetworkInfo
fornece um método não-estático isAvailable()
que soa perfeito.
O problema é que..:
NetworkInfo ni = new NetworkInfo();
if (!ni.isAvailable()) {
// do something
}
atira este erro:
The constructor NetworkInfo is not visible.
Aposta segura é que existe outra classe que retorna um objeto NetworkInfo
. Mas eu não'não sei qual.
O método "getActiveNetworkInfo()getActiveNetworkInfo()
ConnectivityManagerretorna uma instância
NetworkInfoque representa a primeira interface de rede conectada que pode encontrar ou
nulose nenhuma das interfaces estiver conectada. Verificar se este método retorna
null` deve ser suficiente para dizer se uma conexão de internet está disponível ou não.
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
Você também vai precisar:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
no seu manifesto de andróides.
Editar:
Note que ter uma interface de rede ativa não garante que um determinado serviço de rede esteja disponível. Problemas de rede, tempo de inatividade do servidor, baixo sinal, portais cativos, filtros de conteúdo e similares podem impedir que seu aplicativo chegue a um servidor. Por exemplo, você não pode ter certeza se o seu aplicativo pode chegar ao Twitter até receber uma resposta válida do serviço do Twitter.
Também outra nota importante. Você tem que definir android.permission.ACCESS_NETWORK_STATE
no seu AndroidManifest.xml para que isto funcione.
Como poderia ter encontrado a informação de que precisava na documentação online?
Você só tem que ler a documentação das aulas adequadamente e você encontrará todas as respostas que procura. Confira a documentação em ConnectivityManager. A descrição diz-lhe o que deve fazer.
Provavelmente, encontrei-me a mim mesmo:
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
return connectivityManager.getActiveNetworkInfo().isConnectedOrConnecting();