2015-09-22 1 views
0

J'utilise le récepteur de diffusion pour la disponibilité d'Internet. Voici le codela désactivation de wifi entraîne deux fois l'appel à onReceive()

private BroadcastReceiver mConnReceiver = new BroadcastReceiver() { 
    public void onReceive(Context context, Intent intent) { 
     boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); 
     String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON); 
     boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false); 

     NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO); 

     if (!cd.isConnectingToInternet()) { 
      // Internet Connection is not present 
      alert.showAlertDialog(DashBoardActivity.this, 
        "Internet Connection Error", 
        "Please connect to working Internet connection", false); 
      // stop executing code by return 
      return; 
     } 

     if(currentNetworkInfo.isConnected()){ 
      Toast.makeText(getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 
     }else{ 
      Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show(); 
     } 
    } 
}; 

@Override 
protected void onResume() { 
    // TODO Auto-generated method stub 
    super.onResume(); 

    this.registerReceiver(this.mConnReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 
    Toast.makeText(getApplicationContext(), "In resume", Toast.LENGTH_LONG).show(); 
} 

Lorsque je passe sur la connexion Wi-Fi OnReceive est appelé une seule fois, mais quand j'éteins la connexion Wi-Fi OnReceive est appelé deux fois à cause de cette Toast ou pop utilisé dans le code ci-dessus apparaît deux fois.

Quelqu'un peut-il aider sur cette erreur étrange?

Répondre

0
public void onReceive(Context context, Intent intent) { 
     ConnectivityManager connManager = (ConnectivityManager) context 
         .getSystemService(Context.CONNECTIVITY_SERVICE); 
     activeNetworkInfo = connManager.getActiveNetworkInfo(); 
     if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()) {a 
      Toast.makeText(getApplicationContext(),"Connected",Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getApplicationContext(), "Not Connected", Toast.LENGTH_LONG).show(); 
      } 
    } 
+0

Toujours le même effet – Bunny

+0

remove registerReceiver on onResume(), placez ceci dans votre onCreate(). –

+0

registerReceiver dans Oncreate(); –

0

Je suppose que vous n'avez pas désinscrit le récepteur lorsque votre activité est en pause.

Ajouter à votre activité

@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 

    this.unregisterReceiver(this.mConnReceiver); 
    Toast.makeText(getApplicationContext(), "In pause", Toast.LENGTH_LONG).show(); 
} 
+0

Je l'ai déjà essayé, mais il donne le même résultat :-) – Bunny

+0

quand je suis sur le même écran et éteindre et allumer le routeur ce bug vient.Et aussi si je suis directement éteindre et passer sur wifi à partir de la barre d'état. Donc en bref ça ne va pas dans onPause() '.Quand je navigue dans l'application il va dans' onPause' et peut être à cause de cela il vient pour une fois seulement en cas de wifi off.so quoi c'est le problème? – Bunny

+0

@Bunny Mettez un 'Log.d (...)' dans votre 'onReceive' et vérifiez à nouveau s'il se connecte à logcat deux fois ou non. –

0

Si je comprends Il peut y avoir plus d'un État de connexion Wi-Fi lorsque nous wifi dans l'appareil déconnexion.

Vérifiez les états de wifi en utilisant le code suivant et prendre des mesures en conséquence:

int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 

    switch (extraWifiState) 
    { 
    case WifiManager.WIFI_STATE_DISABLED: 
    case WifiManager.WIFI_STATE_DISABLING: 
     enableUI(false); 
     break; 
    case WifiManager.WIFI_STATE_ENABLED: 
     ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED) 
     { 
      try 
      { 
       Thread.sleep(500); 
      } catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     update(); 
     enableUI(true); 
     break; 
    case WifiManager.WIFI_STATE_ENABLING: 
     break; 
    case WifiManager.WIFI_STATE_UNKNOWN: 
     break; 
    } 

} 

peut-il vous aider à trouver la solution à votre problème.

+0

Que sont 'enableUI (false);' 'enableUI (true);' et 'update();' dans le code ci-dessus? – Bunny

+0

Qu'il soit allumé ou éteint il va dans le cas de WifiManager.WIFI_STATE_UNKNOWN: 'case.what est le problème? – Bunny

+0

désolé, il suffit de l'ignorer. Retirez-le et essayez à nouveau @Bunny –