Abra la aplicación para Android cuando la conexión a Internet esté activada, de lo contrario no mostrará ningún mensaje de conexión a Internet

Acabo de crear una aplicación de Android para obtener datos de un sitio web. Quiero comprobar si el dispositivo tiene una conexión a Internet o no. Si el dispositivo tiene conexión a Internet, ejecutar mi código y buscar los datos y mostrarlo, de lo contrario si el dispositivo no tiene Internet, a continuación, mostrar el mensaje de conexión a Internet no. He intentado este código para comprobar la conexión a internet. ¿Cómo puedo llamar al código cuando hay una conexión a Internet?

Mi código Java:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_primary); new FetchWebsiteData().execute(); } }); } private class FetchWebsiteData extends AsyncTask<Void, Void, String[]> { String websiteTitle, websiteDescription,websiteDescription1,websiteDescription2,websiteDescription3,listValue,listValue1; ProgressDialog progress; private Context context; //check Internet connection. private void checkInternetConnection(){ ConnectivityManager check = (ConnectivityManager) this.context. getSystemService(Context.CONNECTIVITY_SERVICE); if (check != null) { NetworkInfo[] info = check.getAllNetworkInfo(); if (info != null) for (int i = 0; i <info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { Toast.makeText(context, "Internet is connected", Toast.LENGTH_SHORT).show(); } } else{ Toast.makeText(context, "not conencted to internet", Toast.LENGTH_SHORT).show(); } } @Override protected void onPreExecute() { super.onPreExecute(); //some code here } @Override protected String[] doInBackground(Void... params) { ArrayList<String> hrefs=new ArrayList<String>(); try { } } catch (IOException e) { e.printStackTrace(); } //get the array list values for(String s:hrefs) { //some code } //parsing first URL String [] resultArray=null; try { } catch (IOException e) { e.printStackTrace(); } //parsing second URL String [] resultArray1=null; try { } catch (IOException e) { e.printStackTrace(); } try{ } catch (Exception e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(String[] result) { ListView list=(ListView)findViewById(R.id.listShow); ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getBaseContext(),android.R.layout.simple_list_item_1,result); list.setAdapter(arrayAdapter); mProgressDialog.dismiss(); } } } 

¿Cómo puedo ejecutar el código cuando la conexión está abierta y cómo mostrar el mensaje cuando la aplicación no tiene conexión a Internet?

prueba esto

 //check internet connection public static boolean isNetworkStatusAvialable (Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager != null) { NetworkInfo netInfos = connectivityManager.getActiveNetworkInfo(); if(netInfos != null) { return netInfos.isConnected(); } } return false; } 

Una vez que el método devuelva el valor que tiene que comprobar

 //detect internet and show the data if(isNetworkStatusAvialable (getApplicationContext())) { Toast.makeText(getApplicationContext(), "Internet detected", Toast.LENGTH_SHORT).show(); new FetchWebsiteData().execute(); } else { Toast.makeText(getApplicationContext(), "Please check your Internet Connection", Toast.LENGTH_SHORT).show(); } 
 public static boolean hasInternetAccess(Context context) { if (isNetworkAvailable(context)) { try { HttpURLConnection urlc = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204") .openConnection()); urlc.setRequestProperty("User-Agent", "Android"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(1500); urlc.connect(); return (urlc.getResponseCode() == 204 && urlc.getContentLength() == 0); } catch (IOException e) { Log.e(TAG, "Error checking internet connection", e); } } else { Log.d(TAG, "No network available!"); } return false; } 

Aquí está la clase para obtener información sobre su conexión a Internet https://gist.github.com/emil2k/5130324

Simplemente copia y pega en tu código y usa sus métodos

Utilice este método para comprobar la disponibilidad de la red

 public static boolean isNetworkAvailable(Context context) { try{ ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); boolean s= activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting(); return s; } catch(Exception e){ System.out.println("exception network"+e); return false; } } 

Si vuelve verdadero usted puede ir a continuación con la llamada de la red más Toast un mensaje del unavailablity de la red.

Crear una clase NetworkInformation.java

 import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class NetworkInformation { private static NetworkInfo networkInfo; public static boolean isConnected(Context context) { ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); try{ networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI); } catch (Exception e) { e.printStackTrace(); } // test for connection for WIFI if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) { return true; } networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); // test for connection for Mobile if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) { return true; } return false; } } 

Ahora compruebe si la red está disponible o no antes de llamar a un asynctask como este:

 if(NetworkInformation.isConnected(YourClassName.this)) { new FetchWebsiteData().execute(); }else{ Toast.makeText(NewsAndEvents.this,R.string.no_connection,Toast.LENGTH_LONG).show(); } 

No olvide incluir los siguientes permisos en AndroidManifest.xml :

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

https://stackoverflow.com/a/9570292/4241807 le indica cómo comprobar la conectividad de red y, a continuación, coloque su mensaje en la parte "else" del código

Use debajo del código y haga una clase como NetworkAvailablity.java

 public class NetworkAvailablity { public static boolean checkNetworkStatus(Context context) { boolean HaveConnectedWifi = false; boolean HaveConnectedMobile = false; ConnectivityManager cm = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo[] netInfo = cm.getAllNetworkInfo(); for (NetworkInfo ni : netInfo) { if (ni.getTypeName().equalsIgnoreCase("WIFI")) if (ni.isConnected()) HaveConnectedWifi = true; if (ni.getTypeName().equalsIgnoreCase("MOBILE")) if (ni.isConnected()) HaveConnectedMobile = true; } return HaveConnectedWifi || HaveConnectedMobile; } } 

Y en el código de su uso de estas líneas siguientes que comprueban que Internet está disponible o no

  if (NetworkAvailablity.checkNetworkStatus(getActivity())) { //code here } else { // give message here by Toast or create the alert dilog Toast.makeText(context, "No network is available",Toast.LENGTH_LONG).show(); } 

Para comprobar si el usuario se conecta al wifi o cualquier punto de acceso es mejor comprobar este método primero para ver si el usuario tiene alguna conexión o no y si devuelve true puede comprobar si tiene conexión real o no con el siguiente método

  public static boolean isOnline(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); return netInfo != null && netInfo.isConnectedOrConnecting(); } 

Comprobar si el usuario tiene tráfico real para enviar solicitud a través de la red

Tenga en cuenta que no debe llamar al método hasTraffic () en el subproceso principal (puede utilizar AsyncTask)

 public static boolean hasTraffic(){ try { URL url = new URL("http://www.google.com/"); HttpURLConnection urlc = (HttpURLConnection)url.openConnection(); urlc.setRequestProperty("User-Agent", "test"); urlc.setRequestProperty("Connection", "close"); urlc.setConnectTimeout(2000); // mTimeout is in seconds urlc.connect(); if (urlc.getResponseCode() == 200) { Log.d("check Traffic ", "has traffic"); return true; } else { return false; } } catch (Exception e) { Log.i("warning", "Error checking internet connection", e); return false; } } 

Comprobar la conexión a internet

  new AsyncTask<Void, Void, Boolean>() { @Override protected void onPostExecute(Boolean flag) { if(flag == true){ // do whatever you want }else{ cantAccessToService(); } } @Override protected Boolean doInBackground(Void... voids) { if(isOnline(SplashActivity.this) && hasTraffic() ){ return true ; }else{ return false ; } } }.execute(); 
 //Implement this code in MainActivity and check if isConnectingToInternet(), then allow Otherwise show the No Internet Connection message. public boolean isConnectingToInternet() { ConnectivityManager connectivity = (ConnectivityManager) _context .getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity != null) { NetworkInfo[] info = connectivity.getAllNetworkInfo(); if (info != null) for (int i = 0; i < info.length; i++) if (info[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } return false; } 
  • OR cláusula en firebase java android
  • Detectar una excepción de entrada errónea
  • Cómo utilizar Iniciar sesión en Android
  • Excepción de SSHJ de Android al conectarse () - "Implementación de KeyFactory ECDSA no encontrada"
  • Cómo recibir la última emisión de secuencia al llamar a rx.Observable.sample ()?
  • Android - Constructor de actividad vs onCreate
  • Finite State Machine (FSM) y Java de Android
  • El resultado de 'File.mkdirs ()' se ignora
  • Configuración de una alarma de repetición en android
  • Cómo leer / analizar el contenido del artículo de un enlace a una cadena
  • Obtener un objeto JSON desde una respuesta HTTP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.