2017-09-12 31 views
0

我在我的應用程序中使用BroadcastReceiver實現了互聯網連接丟失。代碼工作正常,但在互聯網連接或斷開連接上顯示的警報顯示兩次。我想顯示警報或吐司僅在time.Below曾經是我的BroadcastReceiveronReceive of BroadcastReceiver在android中顯示警告2次

的代碼
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

添加敬酒更多的調試信息:國家對每個網絡 – bukkojot

+0

@bukkojot你能PLZ提供代碼提示? –

+0

就像這樣,將它添加到onReceive的開頭,並在變化處看到:Toast.makeText(context.getApplicationContext(),「onReceive:」+ intent.getAction()+「,mobile:」+ cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE )+「,wifi:」+ cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI),Toast.LENGTH_LONG).show(); – bukkojot

回答

0

接收多個廣播設備特定問題。有些手機只發送一個廣播,而其他發送2或3.但有一個解決辦法:

假設你在斷開wifi時斷開連接信息,我猜第一個是正確的,另一個是正確的2只是因爲某種原因的回聲。

要知道消息已被調用,您可以有一個靜態布爾值,它在連接和斷開連接之間切換,並且只在您接收到連接並且布爾值爲true時才調用您的子例程。喜歡的東西:

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在互聯網關閉時返回null。 –

+0

如果我刪除這個如果語句比它仍然顯示2警報。 –

相關問題