Compruebe la conexión a Internet de INTENT

¿Hay un Android Intent ACTION_XXX que me notifica cuando Internet Connection está disponible? Yo instanciaría un BroadcastReceiver que notificaría mi aplicación cuando un usuario habilite la Conexión a Internet (por wifi, por GSM, etc …)

¿Podría alguien ayudarme?

 <receiver android:name=".YOURRECEIVER"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

La respuesta aceptada es correcta. Sólo agrego el código del receptor para completarlo:

 public class NetworkStateReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.d("app","Network connectivity change"); if(intent.getExtras()!=null) { NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { Log.i("app","Network "+ni.getTypeName()+" connected"); } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { Log.d("app","There's no network connectivity"); } } } 

Actualizar a @lujop respuesta:

 public class NetworkStateReceiver extends BroadcastReceiver { private static final String TAG = "NetworkStateReceiver"; @Override public void onReceive(final Context context, final Intent intent) { Log.d(TAG, "Network connectivity change"); if (intent.getExtras() != null) { final ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); final NetworkInfo ni = connectivityManager.getActiveNetworkInfo(); if (ni != null && ni.isConnectedOrConnecting()) { Log.i(TAG, "Network " + ni.getTypeName() + " connected"); } else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { Log.d(TAG, "There's no network connectivity"); } } } } 

MyReceiver.java

 public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(isConnected(context)) Toast.makeText(context, "Connected.", Toast.LENGTH_LONG).show(); else Toast.makeText(context, "Lost connect.", Toast.LENGTH_LONG).show(); } public boolean isConnected(Context context) { ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); boolean isConnected = activeNetwork != null && activeNetwork.isConnected(); return isConnected; } } 

AndroidManifest.xml

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application .............. <receiver android:name="com.example.broadcastreceiversample.MyReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> </application> 

Respuesta continua del mow mwo

Puede activar / desactivar el receptor mediante:

habilitar

  ComponentName receiver = new ComponentName(MainActivity.this, MyReceiver.class); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); Toast.makeText(this, "Disabled broadcst receiver", Toast.LENGTH_SHORT).show(); } 

inhabilitar

 ComponentName receiver = new ComponentName(MainActivity.this, MyReceiver.class); PackageManager pm = this.getPackageManager(); pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); Toast.makeText(this, "Enabled broadcast receiver", Toast.LENGTH_SHORT).show(); } 

Donde, el mismo puede ser llamado en un Intent o en onCreate

La parte que falta de todas las respuestas es un recordatorio para registrarse para esa acción:

 IntentFilter filter = new IntentFilter(); filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); registerReceiver(your_receiver, filter); 

Estoy usando la transmisión para comprobar la conexión cada vez. Cree una clase para información de conexión.

 import android.content.Context; import android.content.ContextWrapper; import android.net.ConnectivityManager; import android.net.NetworkInfo; public class ConnectivityStatus extends ContextWrapper{ public ConnectivityStatus(Context base) { super(base); } public static boolean isConnected(Context context){ ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo connection = manager.getActiveNetworkInfo(); if (connection != null && connection.isConnectedOrConnecting()){ return true; } return false; } } 

Aplique el código en su Actividad:

  private BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(!ConnectivityStatus.isConnected(getContext())){ // no connection }else { // connected } } }; 

Registre la transmisión en el método onCreate() su actividad:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); .. ... .... } 

No se olvide de no registrarse / registrarse en el ciclo de actividad:

 @Override protected void onResume() { super.onResume(); your_activity_context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } @Override protected void onPause() { super.onPause(); your_activity_context.unregisterReceiver(receiver); } 

NetworkInfo.isConnected() es un método poco confiable para probar el estado de Internet, devolverá true cuando existe una conexión de red aunque no tenga acceso a Internet (por ejemplo, wifi sin Internet). Un enfoque más fiable sería utilizar ping con un CONNECTIVITY_ACTION BroadcastReceiver :

 private void registerInternetReceiver() { if (this.internetReceiver != null) return; this.internetReceiver = new BroadcastReceiver() { @Override public void onReceive (Context context, Intent intent) { if (isInternetAvailable()) Log.i ("Tag", "internet status online"); else Log.i ("Tag", "internet status offline"); } }; IntentFilter filter = new IntentFilter(); filter.addAction (ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver (internetReceiver, filter); } private boolean isInternetAvailable() { try { return (Runtime.getRuntime().exec ("ping -c 1 google.com").waitFor() == 0); } catch (Exception ex) { ex.printStackTrace(); } return false; } 

Este código funcionará (en todas las versiones), ya que el registro de manifiesto no funcionará para los dispositivos 7+ (API 25 y superiores).

 private void foo(){ registerReceiver(connectionBroadcastReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); } private BroadcastReceiver connectionBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent == null || intent.getExtras() == null) return; ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.getState() == NetworkInfo.State.CONNECTED) { } } } } }; 

Leería los documentos actualizados para turrón +, porque la intención está obsoleta debido al número de dispositivos, la información de red por sí sola no es suficiente. Utilizaría los comandos del gestor de conectividad (acciones de conectividad, añadir variables allí), ya que la mayoría ha cambiado en el último año, y en la prueba, habilitar los datos de la celda siempre activos, registro detallado y transferencia agresiva, utilice el filtro wlan si es necesario :

https://developer.android.com/reference/android/net/ConnectivityManager.html#CONNECTIVITY_ACTION

  • Estoy recibiendo un error del receptor Broadcast como una excepción de punto nulo en el estudio de Android. Quiero recibir notificaciones de GCM
  • No se puede recibir la intención de difusión de UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED
  • Supervisar el estado del Hotspot en Android
  • ¿Cómo ser notificado de que cada nueva imagen sea visible para la aplicación de la galería?
  • Servicio y un BroadCastReceiver
  • Transmisión de parámetros al BroadcastReceiver
  • Detectar qué tarjeta SIM ha recibido el mensaje
  • Determinar la entrada específica del cargador
  • Android BroadcastReceiver o método simple de devolución de llamada?
  • TIMEZONE_CHANGED intención que se recibe cada pocos segundos
  • La vinculación al servicio que ya fue iniciada por BroadcastReceiver crea una nueva instancia de servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.