2017-09-12 5 views
0

Je suis la mise en œuvre de la connectivité Internet perdue dans mon application en utilisant BroadcastReceiver.Le code fonctionne très bien, mais l'alerte qui est affichée sur la connexion ou la déconnexion internet montrant deux fois.Je veux montrer alerte ou toast une seule fois à un time.Below est mon code de BroadcastReceiveronReceive de BroadcastReceiver affiche une alerte 2 fois dans android

public void onReceive(Context context, Intent intent) { 

      if (intent.getAction().equals("android.net.conn.CONNECTIVITY_CHANGE")) { 
       ConnectivityManager cm = 
         (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
       //NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 

       if (cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED 
         || cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) { 

        // notify user you are online 
        Toast.makeText(context.getApplicationContext(), "Connected", Toast.LENGTH_LONG).show(); 

       } else if (cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.DISCONNECTED 
         || cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.DISCONNECTED) { 
        Constants.alert("Please check your internet connection", context); 

        // notify user you are not online 
       } 
+0

Ajouter à Toast plus d'informations de débogage: les états pour tous les réseaux – bukkojot

+0

@bukkojot Pouvez-vous fournir plz conseil de code? –

+0

Quelque chose comme ceci, ajoutez-le au début de onReceive et voir aux changements: Toast.makeText (context.getApplicationContext(), "onReceive:" + intention.getAction() + ", mobile:" + cm.getNetworkInfo (ConnectivityManager.TYPE_MOBILE) + ", wifi:" + cm.getNetworkInfo (ConnectivityManager.TYPE_WIFI), Toast.LENGTH_LONG) .show(); – bukkojot

Répondre

0

réception multiple de diffusion est un dispositif problème spécifique. Certains téléphones envoient juste une émission tandis que d'autres envoient 2 ou 3. Mais il y a un travail autour:

En supposant que vous obtenez le message de déconnexion lorsque le wifi est déconnecté, je suppose que le premier est le bon et l'autre 2 sont juste des échos pour une raison quelconque. Pour savoir que le message a été appelé, vous pouvez avoir un booléen statique qui est basculé entre connect et disconnect et n'appelle que vos sous-routines lorsque vous recevez une connexion et que boolean a la valeur true. Quelque chose comme:

public class ConnectionChangeReceiver extends BroadcastReceiver { 

private static boolean firstConnect = true; 

@Override 
public void onReceive(Context context, Intent intent) { 
    final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 
    if (activeNetInfo != null) { 
     if(firstConnect) { 
      // do subroutines here 
      firstConnect = false; 
     } 
    } 
    else { 
     firstConnect= true; 
    } 
} 
} 
+0

activeNetInfo renvoie null lorsque l'Internet est désactivé. –

+0

Si je supprime cette instruction if, elle affiche 2 alerte. –