[Resolvido]Verificar conexão android com internet!
25 respostas
P
Pinky
publicstaticbooleanVerificaConexao(Contextcontexto){ConnectivityManagercm=(ConnectivityManager)contexto.getSystemService(Context.CONNECTIVITY_SERVICE);//Pego a conectividade do contexto o qual o metodo foi chamado NetworkInfonetInfo=cm.getActiveNetworkInfo();//Crio o objeto netInfo que recebe as informacoes da NEtwork System.out.println("NETWORK INFO: "+netInfo.getSubtypeName());if((netInfo!=null)&&(netInfo.isConnectedOrConnecting())&&(netInfo.isAvailable()))//Se o objeto for nulo ou nao tem conectividade retorna false returntrue;elsereturnfalse;}
Pessoal em varios sites q procurei no google eles usam esse metodo para verificar conexão com a internet contudo tem um problema q encorntei foi q esse metodo só retorna TRUE!!
ele estava derubando o programa por que eu não sei dizer mas eu tirei fora e ele funcionou belezinha
gabrielaugustodm2 likes
Segue uma função simples:
/* Função para verificar existência de conexão com a internet
*/
public boolean verificaConexao() {
boolean conectado;
ConnectivityManager conectivtyManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (conectivtyManager.getActiveNetworkInfo() != null
&& conectivtyManager.getActiveNetworkInfo().isAvailable()
&& conectivtyManager.getActiveNetworkInfo().isConnected()) {
conectado = true;
} else {
conectado = false;
}
return conectado;
}
Não esqueça de marcar o tópico como resolvido!
Abraço,
P
Pinky
Valeu galera deu certinho!!! =D
L
lcs.farias
o meu projeto está dando erro nesta linha
e o eclipse pede para criar o método getSystemService(String)
espero por uma resposta.
obrigado
A
angelosilvestre
lcs.farias
O método getSystemService é da classe Activity, se você quiser usar este método fora de uma activity deve passar um objeto Context como parâmetro e utilizar context.getSystemService
L
lcs.farias
Obrigado
L
lcs.farias
Consegui fazer aqui.
Obrigado, vai ajudar muito.
D
dennypg
Não esqueçam de adicionar no AndroidManifest.xml a seguinte linha
Aproveitando o topico, alguem conhece alguma forma de fazer o android verificar se tem uma conexão via usb?
É que eu fiz um reverse tethering para pegar a conexão de internet do PC através do USB, mas o ConnectivityManager retorna false quando uso o metodo conectivtyManager.getActiveNetworkInfo().isConnected().
Alguem já passou por isso?
L
leandrooooo
Pessol, utilizei a função do nosso colega gabrielaugustodm e deu certo em partes.
O problema é o seguinte.
Estou conectado em uma rede Wifi ou em uma rede 3G, mas em uma dessas rede não tem internet, a função está me retorna true.
Como que verifico se a rede na qual estou conectado tem internet?
valeu.
L
lucas93lange
leandrooooo:
Pessol, utilizei a função do nosso colega gabrielaugustodm e deu certo em partes.
O problema é o seguinte.
Estou conectado em uma rede Wifi ou em uma rede 3G, mas em uma dessas rede não tem internet, a função está me retorna true.
Como que verifico se a rede na qual estou conectado tem internet?
valeu.
Tenta esse método e mescla com os exemplos citados anteriormente para uma otimização do código:
/***Verificaadisponibilidadedaredededados<br>*TantoWIFIquanto3G*@returntrueoufalse*@seeandroid.net.ConnectivityManager*/publicbooleannetWorkdisponibilidade(Contextcont){booleanconectado=false;ConnectivityManagerconmag;conmag=(ConnectivityManager)cont.getSystemService(Context.CONNECTIVITY_SERVICE);conmag.getActiveNetworkInfo();//Verifica o WIFIif(conmag.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()){conectado=true;}//Verifica o 3Gelseif(conmag.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()){conectado=true;}else{conectado=false;}returnconectado;}
L
leandrooooo
lucas93lange, entendi, mas mesmo assim não é a solução que preciso.
A simulação que estou fazendo é a seguinte: A rede WiFi não tem internet, e esse código nosso me retorna true, ou seja, o android está conectado em uma rede WiFi só que no roteado não tem internet, porque está retornando true? Como validar isso?
Obrigado
L
lucas93lange
sei lá talvez tentar uma conexão a um site qualquer via http, chamando outro método dentro dessa função e caso der timeout é porque não tem conexão e então esse método de teste retorna false.
L
leandrooooo
Será que não tem uma forma de fazer essa verificação.
Não queria colocar um link no app para fazer essa verificação, pq e o site sair do vou ter problema.
Niguém tem uma ideia de como posso resolver?
Obrigado.
Marky.Vasconcelos1 like
Segue uma classe statica que uso sempre para perguntar ao sistema se a conexão está online.
importandroid.content.Context;importandroid.net.ConnectivityManager;importandroid.net.NetworkInfo;importandroid.net.wifi.WifiManager;importbr.com.digitalpages.commons.util.Validate;/** * This class need the followings PERMISSIONS on the Application AndroidManifest.XML to works: * <code> * <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> * <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> * </code> * * @author Marcos.Vasconcelos */publicfinalclassConnectivityInfo{privatestaticContextcontext;privatestaticConnectivityManagerconnectivityManager;privateConnectivityInfo(Contextcontext){// Utility class}/** * Initializes {@code ConnectivityInfo} with a {@code Context}. Call it in the app's * {@code Application} implementation. If not initialized, all methods in this class will throw * {@code IllegalStateException}. */publicstaticvoidinit(Contextctx){Validate.notNull(ctx,"context cannot be null");context=ctx;connectivityManager=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);}publicstaticStringgetMacAddress(){validateState();finalWifiManagerwm=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);returnwm.getConnectionInfo().getMacAddress();}publicstaticbooleanisOffline(){return!isConnected();}publicstaticbooleanisConnected(){returnis3G()||isWifi();}publicstaticbooleanis3G(){validateState();finalNetworkInfomobileNetworkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);if(mobileNetworkInfo==null){returnfalse;}returnmobileNetworkInfo.getState()==NetworkInfo.State.CONNECTED||mobileNetworkInfo.getState()==NetworkInfo.State.CONNECTING;}publicstaticbooleanisWifi(){validateState();finalNetworkInfowifiNetworkInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if(wifiNetworkInfo==null){returnfalse;}returnwifiNetworkInfo.getState()==NetworkInfo.State.CONNECTED||wifiNetworkInfo.getState()==NetworkInfo.State.CONNECTING;}privatestaticvoidvalidateState(){if(context==null){thrownewIllegalStateException("call #init(Context) before requesting ConnectivityInfo operations");}}}
Lembre-se de chamar init pelo menos uma vez (preferencialmente na construção do Application)
L
leandrooooo
Marky, eu entendi, mais o problema continua.
Meu problema é que o device está conectado num roteador que está sem internet, como alertar o usuario?
At.
Leandro Henrique
Marky.Vasconcelos
Verdade, o metodo verifica a conexão wifi.
Se o acesso não tem internet então você tem que esperar o erro estourar (HostNotResolvedException (procure a correta) ou ConnectionTimeoutException) e exibir o erro depois da ação.
L
leandrooooo
Mais para isso eu tenho que tentar acessar alguma pagina na internet para chegar o tal exception, certo?
Marky.Vasconcelos
Você pode fazer qualquer request que use internet.
Em qualquer outro caso você não precisaria de internet não é?
gabrielaugustodm, com esta função criada na minha classe MyConnectivityChecker eu não consigo chamar ela na classe SplashScreen pois no meu app será verificado na tela splash.
M
Maico_Ribeiro
funcionou para meus propósitos, só precisava fazer uma confirmação interna se a internet estava ou não ativada, obrigado!
Kaique_Barreto
Galera tem como fazer algo do tipo usando HTML ou PHP?
R
Renzo_Nogueira1
Vlw, você me ajudou muito
MIOR
Sim da pra fazer por PHP, por Java da pra fazer um Socket simples e tratar a exceção depois.