2014-09-05 15 views
23

Ho già questo codice, che ascolta il cambiamento connettività -Android: Internet cambiamento connettività ascoltatore

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"); 
    } 
    } 
} 

E io controllare la connettività Internet utilizzando questo codice - Internet Check

Ma il problema è che se la rete perde improvvisamente connessione internet senza alcun cambiamento di connettività, questo codice è inutile. C'è un modo per creare il listener Broadcast Receiver per la modifica della connettività Internet? Possiedo un'app Web e le improvvise modifiche alla connettività Internet possono causare problemi.

+0

fare riferimento a questo https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app – lenhuy2106

risposta

45

Prova questa

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; 
    } 
} 

E per la 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(); 
      } 

     } 
    } 
} 

Non dimenticate di mettere questo nella vostra 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> 

Spero che questo vi aiuterà Cheers!

+0

@AntiMatter ha risolto il problema? – Cjames

+7

perché dovresti controllare se (! "Android.intent.action.BOOT_COMPLETED" .equals (intent.getAction())) ???? –

+0

@shriduttkothari Lo uso per scaricare la funzionalità – Cjames

Problemi correlati