studio programacion para herramientas fundamentos desarrollo con avanzado aplicaciones android android-webview android-internet android-websettings

programacion - Android: comprueba programáticamente la conexión a Internet y muestra el cuadro de diálogo si no está conectado



manual android studio avanzado (8)

Esta es una función simple que comprueba su conexión a Internet. Si está Conectado, devuelve verdadero, de lo contrario falso

public boolean isInternetOn() { // get Connectivity Manager object to check connection ConnectivityManager connec = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); // Check for network connections if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED) { return true; } else if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED) { return false; } return false; } }

Aquí hay un proyecto que verifica la conexión a internet y también revisa la URL que es válida o está contenida en this .

Estoy trabajando en un proyecto en vivo. y cuando el usuario haga clic en la aplicación. Aparece la pantalla de bienvenida (hay una vista web en esa pantalla). y si Internet no está conectado, la aplicación falla. Básicamente, mi problema es verificar que el móvil esté conectado a internet o no. si no, entonces no recupere los datos del servicio web en webview y visualice un cuadro de diálogo que muestra "Verifique su conexión a Internet"

Mientras investigaba, encontré muchas cosas, y he tratado de implementar eso. pero, no está cumpliendo con mi requisito

mi codigo es

public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); if (netInfo != null && netInfo.isConnectedOrConnecting()) { return true; } else { Description.setVisibility(View.INVISIBLE); new AlertDialog.Builder(WelcomePage.this) .setTitle(getResources().getString(R.string.app_name)) .setMessage( getResources().getString( R.string.internet_error)) .setPositiveButton("OK", null).show(); } return false; }

estoy llamando a esta función en doInBackground() de AsyncTask

¡Por favor ayuda!


Finalmente, tengo la respuesta.

ConnectivityManager conMgr = ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = conMgr.getActiveNetworkInfo(); if (netInfo == null){ Description.setVisibility(View.INVISIBLE); new AlertDialog.Builder(WelcomePage.this) .setTitle(getResources().getString(R.string.app_name)) .setMessage(getResources().getString(R.string.internet_error)) .setPositiveButton("OK", null).show(); }else{ dialog = ProgressDialog.show(WelcomePage.this, "", "Loading...", true,false); new Welcome_Page().execute(); }


He intentado diferentes métodos descritos anteriormente, además de que he sido atrapado en algunos casos. Entonces, finalmente, estoy usando el siguiente fragmento de código para hacer una llamada de red ...

try { InetAddress address = InetAddress.getByName("www..com"); //Connected to working internet connection } catch (UnknownHostException e) { e.printStackTrace(); //Internet not available }

Esto puede ser útil en muchas perspectivas. Si algo no está bien en este enfoque, hágamelo saber.


La conexión a Internet también verifica en el onCreate() o onResume() . No hay necesidad de llamar dentro de AsyncTask.

o Puede llamar antes de llamar al método Execute () de AsyncTask

if(isOnline) { MyAsyncTask task=new MyAMyAsyncTask(); task.execute(); } else { // no internet connection }


Usted podría retirar esta biblioteca:

https://github.com/novoda/merlin

Simplemente implement Connectable y obtendrás una devolución de llamada cuando la red se caiga o se active.

Por lo tanto puedes mostrar tu diálogo en este escenario.

También puede consultar el estado actual de la biblioteca y elegir no hacer su tarea de red

Crear Merlin (usando Merlin.Builder ())

merlin = new Merlin.Builder().withConnectableCallbacks().build(context);

Enlazar y desvincular el servicio en su actividad.

@Override protected void onResume() { super.onResume(); merlin.bind(); } @Override protected void onPause() { super.onPause(); merlin.unbind(); }

Registrarse para devoluciones de llamada

merlin.registerConnectable(new Connectable() { @Override public void onConnect() { // Do something! } });

El MerlinActivity dentro de la demostración muestra una manera sencilla de separar a Merlin de su código de aplicación principal.


doInBackground ejecuta en un subproceso diferente al de la interfaz de usuario principal, por lo que no puede crear un cuadro de diálogo mostrar aquí. En su lugar, anule onPreExecute en su AsyncTask y realice la prueba allí.


Comprobar la conexión a internet

ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = mgr.getActiveNetworkInfo(); if (netInfo != null) { if (netInfo.isConnected()) { // Internet Available }else { //No internet } } else { //No internet }


if (InternetConnection.checkConnection(context)) { // Internet Available... } else { // Internet Not Available... }

solo copia debajo de la clase

public class InternetConnection { /** CHECK WHETHER INTERNET CONNECTION IS AVAILABLE OR NOT */ public static boolean checkConnection(Context context) { final ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); if (activeNetworkInfo != null) { // connected to the internet Toast.makeText(context, activeNetworkInfo.getTypeName(), Toast.LENGTH_SHORT).show(); if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) { // connected to wifi return true; } else if (activeNetworkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { // connected to the mobile provider''s data plan return true; } } return false; } }

Dar siguiente permiso para manifestar

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