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

Boa tarde, pessoal!

Já dei uma pesquisada no Google, no livro de Java que tenho aqui mas não consegui nada a respeito.

Bom, eu precisava saber se há alguma função semelhante a fopen do PHP, onde eu possa fazer a leitura de um arquivo antes de liberar o restante do código por favor?

Em php em faço assim: $site = fopen (“http://www.google.com.br/”, “r”);

Assim, consigo saber se o usuário tem internet antes de liberar o restante dos códigos.

Eu precisava fazer algo deste tipo antes de liberar o código com a WebView no app que estou fazendo. Pois a WebView está funcionando legal, mas quando não há sinal de internet, dá erro de carregamento e aparece o link a ser aberto.
Queria ocultar esse erro com uma condicional. Caso não tenha sinal de internet, o app interrompe o carregamento da WebView e dá uma tela de aviso em vez do erro. Ou até melhor, desse um aviso e o user ao clicar em ok, fecharia o app.

Desde já agradeço a atenção e ajuda de todos.
Até+

2 curtidas

Pra verificar se o aparelho está conectado, precisa colocar essa permissão no AndroidManifest.xml

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

E esse código deve ser suficiente:

public boolean temInternet() {
    ConnectivityManager manager =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = manager.getActiveNetworkInfo();
    return info != null && info.isConnected();
}
1 curtida

Complementando a resposta do @FelipeTorres, maiores detalhes aqui http://developer.android.com/intl/pt-br/training/monitoring-device-state/connectivity-monitoring.html, onde também encontra forma de verificar alterações na conectividade.

1 curtida

Obrigado pelas resposta.
Vou testar e posto o resultado.

@FelipeTorres, infelizmente o código não funcionou. O aparelho estando sem internet e sem conexão à rede, não dá nenhum aviso e falta de conectividade e abre normalmente.

O que pode ter acontecido? Versão meu Android é 2.3.6.

@fabioqb, também acessei o link e dei uma lida… usei o código ali apresentado mas não funcionou. Mesmo sem internet o app abre normalmente com as orientações que estão no link.

Vou continuar pesquisando esse método, pois posso estar montando errado ou esquecendo de algo.

Obrigado.

alem da permissão que o @FelipeTorres indicou também habilite a:

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

e uma pesquisada no GUJ não mata ninguém tbm…heheh…

Segue: [Resolvido]Verificar conexão android com internet!

1 curtida

Obrigado pela resposta.
Sim, já coloquei essa permissão também.

Vou dar uma olhada no link.
Até+

@FelipeTorres, achei que não teria funcionado pelo fato de não inserir o código para acessar a internet (WebView), mas ao colocar o código também não funcionou. Onde devo estar errando?

Abaixo segue meu activity. Repare onde coloquei o código que me indicou… se eu colocar dentro do void, dá erro no código e não compila… da forma como está compila normalmente, mas se estiver sem rede o código não roda.

package br.com.projetolouvai.projetolouvai;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.graphics.Bitmap;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class louvai extends AppCompatActivity {

    // net off
    public boolean temInternet() {
        ConnectivityManager manager =
                (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = manager.getActiveNetworkInfo();
        return info != null && info.isConnected();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().hide();
        setContentView(R.layout.activity_louvai);


        String url ="http://www.google.com.br/";
        WebView view=(WebView) this.findViewById(R.id.webView);
        WebSettings ws = view.getSettings();
        ws.setJavaScriptEnabled(true);
        ws.setSupportZoom(false);
        view.loadUrl(url);

        view.loadUrl(view.getUrl());
        view.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
            }

            @Override
            public void onPageFinished(WebView view, String url) {
            }
        });



    }

}

Obrigado

Meu caro, este método “temInternet” retornará true ou false dependendo da conectividade.
Você não o está usando em lugar algum ainda.
:expressionless:

Que tal colocar algo como:

if (temInternet()) {
// TODO Montar a WebView
} else {
// TODO Mostrar mensagem / não carregar a webview
}
1 curtida

@fabioqb, obrigado pela resposta.

Vou testar aqui e ver se consigo montar o código.

Eu havia iniciado em Java um tempo atrás, mas acabei deixando de lado para ver C++ e PHP, e acabei ficando mais com PHP… Como o mundo mobile está em alto, comecei a ver sobre criação de app e afins. Estou pretendendo alguns WebApp…

Mas confesso que ainda estou um bem imaturo para com Java/Android. Sou muito grato pela paciência e ajuda dos colegas aqui.

Assim, teria como indicar material, dica, para eu estudar? Tipo as principais funções ou atributos, algo assim para eu começar. Tenho conhecimento de como funciona funções como a que mencionou no PHP, mas não sei ao certo como montá-las no Android.

Se puder indicar algumas apostila online ao algum livro e dicas das principais códigos que teria que estudar para iniciar.

Mais uma vez, obrigado.
Até+

O melhor lugar para começar com Android é no próprio site da plataforma.

http://developer.android.com/intl/pt-br/training/index.html

@fabioqb, obrigado pela dica.

Aqui, consegui montar o código com a condicional. Quando está com internet a WebView abre e quando eu desconecto o app não carrega o WebView, mas também não aparece a informação de falta de conexão.

Sei que estou abusando, mas teria como me ajudar só mais nessa etapa? Que creio que é a última.

No else eu coloquei System.out.println(“Sem conexão”)… como eu faça para que apareça essa informação na tela? Pois fica tudo branco e não aparece nenhuma informação se estiver sem internet.

Somente informar System.out.println no activity já seria suficiente ou eu tenho que mexer em algum xml?

Ah, o WebView está usando 100% da tela, mas coloquei dentro do if. Neste caso era para o print exibir a mensagem no lugar onde entraria o WebView, correto?

Mais uma vez, obrigado.
Até+

=== Editado ===

Obrigado a todos pelas dicas, ajuda e paciência. Consegui resolver da seguinte forma:

Percebi que o ConnectivityManager somente verificava se havia conexão de rede, então pesquisei e consegui o seguinte código:

 public Boolean getUrlDisponivel(){
        String urlName = null;
        if (urlName == null) {
            urlName = "http://www.google.com/";
        }
        java.net.HttpURLConnection urlConnection = null;
        try {
            java.net.URL url = new java.net.URL(urlName.toString());
            urlConnection = (java.net.HttpURLConnection) url.openConnection();
            if (urlConnection.getResponseCode() == java.net.HttpURLConnection.HTTP_OK) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            return false;
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
        }
    }

Assim, verifica se consegue ler a url e, se estiver sem rede ou se tiver rede mas mas internet retorna false e true ao ter sucesso na leitura da url.

Montei uma string contendo código html.

String html = "<html>";
html += "<body>";
html += "Sem conexao com a internet";
html += "</body>";
html += "</html>";

Depois, em vez de colocar todo o código da Webview dentro do if, eu coloquei somente o loadUrl. E, para o else, eu criei o loadData com o html acima.

if (getUrlDisponivel()){

view.loadUrl(url);

} else {

view.loadData(html, "text/html", "UTF-8");

}

Que Deus continue os abençoando ricamente.
Até+

1 curtida

Olá amigos, teria como criar algo desse tipo, em HTML ou PHP ?

Olá, Kaique.
Seria para rodar no App ou no navegador?

No navegador tem como fazer isto facilmente.

O aplicativo funciona como navegador, basicamente!
Como faço no navegador? Obrigado desde ja!

Em PHP, usando um servidor local, poderá usar este código:

$site = fopen ("http://www.google.com.br/", "r");
if (!$site) {
    echo ' aviso internet off ';
} else { 
    echo 'aviso de internet on';
}
fclose($site);

Em JavaScript deve ter alguma função semelhante.

Se conhecer algo em javascript pode me mandar tambem! Obrigado, irei testar!

ESTE É O ERRO QUE QUERO EVITAR, POIS APARECE O LINK