[Resolvido]Verificar conexão android com internet!

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 é?

Em qual activity posso colocar esse método:

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;
}
1 curtida

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.

funcionou para meus propósitos, só precisava fazer uma confirmação interna se a internet estava ou não ativada, obrigado!

Galera tem como fazer algo do tipo usando HTML ou PHP?

Vlw, você me ajudou muito

Sim da pra fazer por PHP, por Java da pra fazer um Socket simples e tratar a exceção depois.