[Resolvido]Verificar conexão android com internet!

public static boolean VerificaConexao(Context contexto){    
        
    ConnectivityManager cm = (ConnectivityManager) contexto.getSystemService(Context.CONNECTIVITY_SERVICE);//Pego a conectividade do contexto o qual o metodo foi chamado    
        
    NetworkInfo netInfo = 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    
        return true;    
    else    
        return false;    
        
    } 

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!!

alguem saberia disser onde estaria o erro???

obrigado!

Estive testando o seu codigo nesse trecho

System.out.println("NETWORK INFO: "+netInfo.getSubtypeName());

ele estava derubando o programa por que eu não sei dizer mas eu tirei fora e ele funcionou belezinha

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,

2 curtidas

Valeu galera deu certinho!!! =D

o meu projeto está dando erro nesta linha

e o eclipse pede para criar o método getSystemService(String)

espero por uma resposta.
obrigado

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

Obrigado

Consegui fazer aqui.

Obrigado, vai ajudar muito.

Não esqueçam de adicionar no AndroidManifest.xml a seguinte linha

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

olá pessoal!

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?

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.

[quote=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.[/quote]

Tenta esse método e mescla com os exemplos citados anteriormente para uma otimização do código:


/**
     *Verifica a disponibilidade da rede  de dados<br>
     *Tanto WIFI quanto 3G
     *@return  true ou false
     *@see android.net.ConnectivityManager
     */

    public boolean netWorkdisponibilidade(Context cont){
        boolean conectado = false;
        ConnectivityManager conmag;
        conmag = (ConnectivityManager)cont.getSystemService(Context.CONNECTIVITY_SERVICE);
        conmag.getActiveNetworkInfo();
        //Verifica o WIFI
        if(conmag.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()){
            conectado = true;
        }
       //Verifica o 3G
        else if(conmag.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()){
            conectado = true;
        }
        else{
            conectado = false;
        }
        return conectado;
    }

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

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.

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.

Segue uma classe statica que uso sempre para perguntar ao sistema se a conexão está online.

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import br.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
 */
public final class ConnectivityInfo {

    private static Context context;

    private static ConnectivityManager connectivityManager;

    private ConnectivityInfo(Context context) {
        // 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}.
     */
    public static void init(Context ctx) {
        Validate.notNull(ctx, "context cannot be null");

        context = ctx;
        connectivityManager =
                (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    }

    public static String getMacAddress() {
        validateState();

        final WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        return wm.getConnectionInfo().getMacAddress();
    }

    public static boolean isOffline() {
        return !isConnected();
    }

    public static boolean isConnected() {
        return is3G() || isWifi();
    }

    public static boolean is3G() {
        validateState();

        final NetworkInfo mobileNetworkInfo =
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

        if (mobileNetworkInfo == null) {
            return false;
        }

        return mobileNetworkInfo.getState() == NetworkInfo.State.CONNECTED
                || mobileNetworkInfo.getState() == NetworkInfo.State.CONNECTING;
    }

    public static boolean isWifi() {
        validateState();

        final NetworkInfo wifiNetworkInfo =
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);

        if (wifiNetworkInfo == null) {
            return false;
        }

        return wifiNetworkInfo.getState() == NetworkInfo.State.CONNECTED
                || wifiNetworkInfo.getState() == NetworkInfo.State.CONNECTING;
    }

    private static void validateState() {
        if (context == null) {
            throw new IllegalStateException(
                    "call #init(Context) before requesting ConnectivityInfo operations");
        }
    }

}

Lembre-se de chamar init pelo menos uma vez (preferencialmente na construção do Application)

1 curtida

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

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.

Mais para isso eu tenho que tentar acessar alguma pagina na internet para chegar o tal exception, certo?

Você pode fazer qualquer request que use internet.

Em qualquer outro caso você não precisaria de internet não é?