validar tengo studio internet hacer conexion check change java android connectivity

java - tengo - hacer ping android studio



Android: oyente de cambio de conectividad de Internet (3)

Ya tengo este código que escucha el cambio de conectividad.

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"); } } if(intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) { Log.d("app", "There''s no network connectivity"); } } }

Y compruebo la conectividad de Internet usando este código: comprobación de Internet

Pero el problema es que si la red pierde de repente la conexión a Internet sin ningún cambio de conectividad, este código es inútil. ¿Hay alguna manera de crear el receptor de Broadcast Receiver para el cambio de conectividad de Internet? Tengo una aplicación web y los cambios repentinos en la conectividad a Internet pueden causar problemas.


Esto debería funcionar:

public class ConnectivityChangeActivity extends Activity { private BroadcastReceiver networkChangeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d("app","Network connectivity change"); } }; @Override protected void onResume() { super.onResume(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(networkChangeReceiver); } }


Prueba esto

public class NetworkUtil { public static int TYPE_WIFI = 1; public static int TYPE_MOBILE = 2; public static int TYPE_NOT_CONNECTED = 0; public static final int NETWORK_STATUS_NOT_CONNECTED=0,NETWORK_STAUS_WIFI=1,NETWORK_STATUS_MOBILE=2; public static int getConnectivityStatus(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); if (null != activeNetwork) { if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) return TYPE_WIFI; if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) return TYPE_MOBILE; } return TYPE_NOT_CONNECTED; } public static int getConnectivityStatusString(Context context) { int conn = NetworkUtil.getConnectivityStatus(context); int status = 0; if (conn == NetworkUtil.TYPE_WIFI) { status = NETWORK_STAUS_WIFI; } else if (conn == NetworkUtil.TYPE_MOBILE) { status =NETWORK_STATUS_MOBILE; } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) { status = NETWORK_STATUS_NOT_CONNECTED; } return status; } }

Y para BroadcastReceiver

public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { int status = NetworkUtil.getConnectivityStatusString(context); Log.e("Sulod sa network reciever", "Sulod sa network reciever"); if ("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) { if(status==NetworkUtil.NETWORK_STATUS_NOT_CONNECTED){ new ForceExitPause(context).execute(); }else{ new ResumeForceExitPause(context).execute(); } } } }

No olvides poner esto en tu AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <receiver android:name="NetworkChangeReceiver" android:label="NetworkChangeReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> </intent-filter> </receiver>

Espero que esto te ayude, ¡Salud!


Actualización :

Las aplicaciones orientadas a Android 7.0 (API nivel 24) y superior no reciben transmisiones CONNECTIVITY_ACTION si declaran el receptor de difusión en su manifiesto. Las aplicaciones seguirán recibiendo transmisiones de CONNECTIVITY_ACTION si registran su BroadcastReceiver con Context.registerReceiver () y ese contexto sigue siendo válido.

Debe registrar el receptor a través del método registerReceiver() :

IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"); mCtx.registerReceiver(new NetworkBroadcastReceiver(), intentFilter);