2013-03-19 140 views
0

我的應用程序中有一個自定義的BroadcastReceiver,用於在網絡連接更改時接收意圖。但出於某種原因,只要連接發生變化,它就會運行兩次,我不知道爲什麼。爲什麼我的BroadcastReceiver onReceive()運行兩次?

我該如何解決這個問題,以便它只在網絡更改時觸發一次?

注意: 不,它不在清單中兩次。

謝謝!

編輯: 這裏的接收器代碼:

public class NetworkStateReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
     // Do stuff; This is running twice! 
    } 
} 

而這裏的清單中的位:

<receiver android:name="NetworkStateReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
    </intent-filter> 
</receiver> 
+4

您可以加入一些代碼嗎? (相關代碼) – staaar 2013-03-19 09:45:36

+0

Dude添加你的代碼你試過的。 – 2013-03-19 09:47:30

+0

如果沒有一些代碼來找到問題,很難給出答案。你可以嘗試使用單例模式來避免創建多個接收器對象,但我認爲你的問題在代碼中的某處,你應該修復它,而不是找到一個解決方法 – Xavjer 2013-03-19 09:48:20

回答

0

接收多個廣播是設備特定問題。一些電話只發送一個廣播,而另一個發送2或3.但有一個工作:

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

要知道消息已被調用,您可以有一個靜態布爾值,它在連接和斷開連接之間切換,並且只在您接收到連接並且布爾值爲true時才調用您的子例程。類似於: public class ConnectionChangeReceiver extends BroadcastReceiver {static 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; 
    } 
} 

}