Para determinar cuándo el dispositivo tiene una conexión de red, solicite el permiso <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
y luego puede verificar con el siguiente código. Primero defina estas variables como variables de clase.
private Context c;
private boolean isConnected = true;
En el método initialize onCreate()
c = this;
A continuación, comprobar si hay conectividad.
ConnectivityManager connectivityManager = (ConnectivityManager)
c.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivityManager != null) {
NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
if (ni.getState() != NetworkInfo.State.CONNECTED) {
// record the fact that there is not connection
isConnected = false;
}
}
A continuación, para interceptar el WebView
requets, se podría hacer algo como lo siguiente. Si usa esto, probablemente desee personalizar los mensajes de error para incluir parte de la información disponible en el método onReceivedError
.
final String offlineMessageHtml = "DEFINE THIS";
final String timeoutMessageHtml = "DEFINE THIS";
WebView browser = (WebView) findViewById(R.id.webview);
browser.setNetworkAvailable(isConnected);
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (isConnected) {
// return false to let the WebView handle the URL
return false;
} else {
// show the proper "not connected" message
view.loadData(offlineMessageHtml, "text/html", "utf-8");
// return true if the host application wants to leave the current
// WebView and handle the url itself
return true;
}
}
@Override
public void onReceivedError (WebView view, int errorCode,
String description, String failingUrl) {
if (errorCode == ERROR_TIMEOUT) {
view.stopLoading(); // may not be needed
view.loadData(timeoutMessageHtml, "text/html", "utf-8");
}
}
});
Eché un vistazo a los errores que mencionas y actualicé mi respuesta para abordarlos. Es posible que desee familiarizarse con Java antes de ir demasiado lejos con un proyecto de Android. Una buena base de Java ayudará inmensamente a la depuración de estos pequeños errores y tratar de detectar problemas. Avíseme si encuentra otros problemas con esto. – Brian
Brian, gracias por echar un vistazo al código. Agradezco enormemente su ayuda. Terminé usando el código "onReceivedError" y en lugar de cargar una cadena "timeoutMessageHtml", tengo la aplicación "setContentView()" en un nuevo diseño lineal que creé que tiene un mensaje de error personalizado. Además, estás 100% correcto con respecto a tener una buena base Java. He leído un par de libros de Java y actualmente estoy tomando una clase de Java, sin embargo, aprendo mejor al hacerlo, así que pensé qué mejor manera de aprender Java que crear una aplicación. Thx otra vez. –
¡Me alegra ser una ayuda y estoy feliz de que funcione! – Brian