2017-09-12 4 views
0

Ich implementiere Internetkonnektivität verloren in meiner Anwendung mit BroadcastReceiver.The Code funktioniert gut, aber die Warnung, die auf Internet-Verbindung oder Trennung angezeigt wird zweimal angezeigt. Ich möchte Alert oder Toast anzeigen nur ein einziges Mal in einem time.Below ist mein Code von BroadcastreceiveronReceive von BroadcastReceiver zeigt Alarm 2 mal in 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

In mehr Debug-Informationen Toast: Staaten für jedes Netzwerk – bukkojot

+0

@bukkojot Können Sie Codehinweis plz? –

+0

So etwas, fügen Sie es in Start von onReceive hinzu und sehen Sie sich Änderungen an: Toast.makeText (context.getApplicationContext(), "onReceive:" + abent.getAction() + ", mobile:" + cm.getNetworkInfo (ConnectivityManager.TYPE_MOBILE) + ", wifi:" + cm.getNetworkInfo (ConnectivityManager.TYPE_WIFI), Toast.LENGTH_LONG) .show(); – bukkojot

Antwort

0

mehr Rundfunk-Empfang ein Gerät spezifisches Problem ist. Einige Telefone senden nur eine Sendung, während andere senden 2 oder 3. Aber es gibt eine Arbeit rund um:

Angenommen, Sie erhalten die Nachricht trennen, wenn das WLAN getrennt ist, würde ich raten, die erste ist die richtige und die andere 2 sind nur Echos aus irgendeinem Grund.

Um zu wissen, dass die Nachricht aufgerufen wurde, könnten Sie einen statischen Boolean haben, der zwischen connect und disconnect umgeschaltet wird und nur Ihre Unterroutinen aufruft, wenn Sie eine Verbindung erhalten und der Boolesche Wert true ist. Etwas wie:

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 Dies gibt null zurück, wenn das Internet ausgeschaltet ist. –

+0

Wenn ich diese if-Anweisung entferne, wird immer noch 2 Alarm angezeigt. –

Verwandte Themen