Preciso dizer se meu dispositivo tem conexão com a Internet ou não. Encontrei muitas respostas como:
private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null;
}
(Retirado de Detectar se há uma conexão com a Internet disponível no Android .)
Mas isso não está certo, por exemplo, se eu estiver conectado a uma rede sem fio que não tem acesso à Internet , esse método retornará verdadeiro ... Existe uma maneira de saber se o dispositivo tem conexão com a Internet e não se está apenas conectado para algo?
android
internet-connection
android-internet
Buda Gavril
fonte
fonte
isNetworkConnected
bloco de funções contém código descontinuado para todosBuild.VERSION.SDK_INT >= Build.VERSION_CODES.M
. Uma discussão mais aprofundada sobre o assunto e como corrigi-lo pode ser encontrada aqui stackoverflow.com/questions/53532406/…Respostas:
Você está certo. O código que você forneceu apenas verifica se há uma conexão de rede. A melhor maneira de verificar se há uma conexão ativa com a Internet é tentar conectar-se a um servidor conhecido via http.
É claro que você pode substituir a
http://www.google.com
URL por qualquer outro servidor ao qual você deseja se conectar ou por um servidor que você conheça com um bom tempo de atividade.Como Tony Cho também apontou neste comentário abaixo , certifique-se de não executar esse código no thread principal, caso contrário, você receberá uma exceção NetworkOnMainThread (no Android 3.0 ou posterior). Use um AsyncTask ou Runnable.
Se você deseja usar o google.com, consulte a modificação de Jeshurun. Em sua resposta, ele modificou meu código e o tornou um pouco mais eficiente. Se você se conectar a
e verifique o código de resposta para 204
então você não precisa buscar a página inicial do Google inteira primeiro.
fonte
ConnectivityManager
não exige isso). Caso contrário, nos dispositivos Android 4.x +, você receberá umaNetworkOnMainThread
exceção.Modifiquei ligeiramente a resposta do THelper para usar um hack conhecido que o Android já usa para verificar se a rede Wi-Fi conectada tem acesso à Internet. Isso é muito mais eficiente do que acessar a página inicial do Google inteira. Veja aqui e aqui para mais informações.
fonte
return true se a internet estiver realmente disponível
Verifique se você tem essas duas permissões
se o http não funcionar, é por causa da nova segurança do Android que eles não permitem a comunicação de texto sem formatação agora. por enquanto apenas para passar por isso.
fonte
Se você estiver segmentando Lollipop ou superior, é possível usar a nova classe NetworkCapabilities, ou seja:
fonte
connectivityManager.getActiveNetwork();
requer a API lvl23, que é Marshmallow e não Lollipop.capabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
parecia fazer o truque para mim!Você não precisa necessariamente fazer uma conexão HTTP completa. Você pode tentar abrir uma conexão TCP com um host conhecido e, se for bem-sucedido, você possui conectividade com a Internet.
Em seguida, basta verificar com:
fonte
AsyncTask
Com base nas respostas aceitas, construí esta classe com um ouvinte para que você possa usá-la no thread principal:
Primeiro : a classe InterntCheck que verifica a conexão com a Internet em segundo plano e depois chama um método de ouvinte com o resultado.
Segundo : instancie uma instância da classe no thread principal e aguarde a resposta (se você trabalhou com a API do Firebase para android antes que isso lhe seja familiar!).
Agora, no método onComplete, você saberá se o dispositivo está conectado à Internet ou não.
fonte
tente este
fonte
Você pode fazer isso usando a
ConnectivityManager
API para android. Permite verificar se você está conectado à Internet e o tipo de conexão à Internet à qual está conectado. Basicamente, com ou sem medição.Para verificar se há conexão com a internet.
Link da documentação: https://developer.android.com/training/monitoring-device-state/connectivity-status-type
fonte
Espero que o código acima o ajude, também verifique se você tem permissão de internet em seu aplicativo.
fonte
A maneira mais recente de fazer isso na documentação é usar o
ConnectivityManager
para consultar a rede ativa e determinar se ela possui conectividade com a Internet.Adicione essas duas permissões ao seu arquivo AndroidManifest.xml:
fonte
Verifique o tipo de wifi no gerenciador de conectividade:
A documentação do Android descreve 'TYPE_WIFI' como 'Uma conexão de dados WIFI. Os dispositivos podem suportar mais de um. '
fonte
Uma boa solução para verificar se a rede ativa possui conexão à Internet:
fonte
Você pode usar o ConnectivityManager.
Verifique isso e isso
fonte
Use a seguinte classe , atualizada para o último nível da API: 29.
fonte