GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

[Resolvido]Verificar conexão android com internet!


#5

o meu projeto está dando erro nesta linha

ConnectivityManager conectivtyManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

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

espero por uma resposta.
obrigado


#6

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


#7

Obrigado


#8

Consegui fazer aqui.

Obrigado, vai ajudar muito.


#9

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

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

#10

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?


#11

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.


#12

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

#13

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


#14

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.


#15

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.


#16

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)


Função para testar se há internet antes de liberar o código da WebView
#17

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


#18

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.


#19

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


#20

Você pode fazer qualquer request que use internet.

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


#21

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

#23

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.


#24

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


#26

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