oreo network internet example custom change android broadcastreceiver connectivity

network - broadcastreceiver android example



Desafortunadamente, la aplicaciĆ³n se detiene al verificar la red (3)

Estoy usando el siguiente código para verificar la conexión a Internet a través de mi aplicación.

public class ConnectionChangeReceiver extends BroadcastReceiver { @Override public void onReceive( Context context, Intent intent ) { ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService( Context.CONNECTIVITY_SERVICE ); NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE ); if (activeNetInfo != null) { Toast.makeText( context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } if(mobNetInfo != null) { Toast.makeText( context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT ).show(); } } }

Y he definido el permiso requerido en el archivo de manifiesto.

Cuando intento desconectar / conectar la red con la tecla F8, recibiré " logcat SE HA DETENIDO" y no logcat ninguna impresión en logcat .

¿Puedo saber cuál es el error que estoy haciendo?


¿Has añadido esto en AndroidManifest.xml ?

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

Si ha agregado anteriormente, compruebe este código:

<receiver android:name=".UpdateReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>

y

public class UpdateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE ); NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting(); if (isConnected) Log.i("NET", "Connected" + isConnected); else Log.i("NET", "Not Connected" + isConnected); } }

NOTA: Si estás apuntando a Android N Preview. Por encima del receptor no funcionará según lo restringido restringido por Google.

Enlace: https://developer.android.com/preview/features/background-optimization.html#connectivity-action


El código anterior no funcionaba correctamente para la conexión wi-fi. Este es el Modificado

SIMPLE UNO

. androidmanifest.xml

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

Etiqueta de aplicación interna de androidmanifest.xml

<receiver android:name="android.YOUR-JAVA-CLASS-PATH.BackgroundSync" android:enabled="true"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>

BackgroundSync.java

import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.util.Log; import android.widget.Toast; public class BackgroundSync extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager cm =(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (cm.getActiveNetworkInfo()!=null){ Toast.makeText(context, "Connected to Internet", Toast.LENGTH_LONG).show(); } else Log.i("INTERNET","---------------------> Internet Disconnected. "); } }