2014-05-06 48 views
2

我正在開發一個android應用程序,我有下一個問題: 我實現了廣播接收器,用於連接更改,方法onReceive似乎被稱爲4當3G和Wifi同時啓用時連續數次。

所以我的問題是:
有沒有辦法只聽互聯網連接,而不是網絡更改?
或者當3G和Wifi同時啓用時,方法onReceive只能被調用一次嗎?當3G和WIFI同時啓用時,NetworkChangeReceiver的onReceive方法被多次調用

這是我的代碼:

public class NetworkChangeReceiver extends BroadcastReceiver { 

    public static final String TAG = "NetworkMonitoring"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     if (isOnline(context)) { 

      Log.v(TAG, "Connected!"); 
      // update(context); 
     } else { 

      Log.v(TAG, "Not connected!"); 
      // stopUpdate(context); 

     } 
    } 

    public boolean isOnline(Context context) { 

     ConnectivityManager cm = (ConnectivityManager) context 
       .getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnected()) 
      return true; 
     return false; 

    } 

} 

在Android清單:

<receiver android:name="xxxxx.xxxxx.xxxxx.NetworkChangeReceiver" > 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

這裏是日誌:

05-06 16:24:05.985:V/NetworkMonitoring (569):連接!
05-06 16:24:10.250:V/NetworkMonitoring(569):已連接!
05-06 16:24:10.720:V/NetworkMonitoring(569):Connected!
05-06 16:24:11.031:V/NetworkMonitoring(569):Connected!

(注意時間!)

回答

3

我有同樣的問題與同類型的廣播接收器。 搜索了一下,找到了一個解決方法。

BroadcastReceiver receives multiple identical messages for one event

編輯: 的解決方法是使用一個標誌,告訴你什麼時候是第一次被調用的onReceive。

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; 
     } 
    } 
} 

希望它有幫助。

+1

非常感謝您發佈和花時間分享您找到的解決方案的努力。但不幸的是,這不能回答,因爲它只是一個鏈接到現有的SO線程。它應該是評論! –

+0

嗯,這個問題是在2個月前添加的,而在我發佈的鏈接中有一個同樣的問題(從2年前開始)的接受答案。 @PareshMayani 我真的不明白你想要我做什麼。請解釋,因爲我是新來的積極參與本網站。 – Hristova

+0

堆棧溢出不鼓勵在鏈接中進行回答。提供該頁面的部分內容,以便在答案中回答OP的問題,以便未來的讀者即使鏈接被破壞也能夠閱讀。在這種情況下,它只是一個鏈接到一個現有的Stackoverflow線程,所以你應該留下一個評論(但解鎖評論特權,你將需要至少50名聲譽)。 –

相關問題