2011-06-03 66 views
1

我需要知道如何檢測Wi-Fi網絡中的交換機,儘管是自動或手動的,這並不重要。檢測到交換機時,整個系統是否有某種意圖被廣播?還是必須通過調用ConnectivityManager上的方法手動檢查是否選擇了新網絡?如何檢測網絡中的變化?

+2

[檢測3G或Wifi網絡恢復]的可能的副本(http://stackoverflow.com/questions/4503561/detect-3g-or-wifi-network-restoration) – Reno 2011-06-03 08:07:57

+0

這個問題似乎回答如何檢測是否一個網絡一般連接或斷開。我需要知道網絡之間何時發生切換。 – ThaMe90 2011-06-03 08:18:06

+0

您可以使用相同的代碼。如果類型爲Wifi,請使用NetworkInfo獲取[EXTRA_](http://developer.android.com/reference/android/net/wifi/WifiManager.html)數據。例如,對於各種WiFi n/w,BSSID應該不同 – Reno 2011-06-03 08:36:21

回答

7

在這個時間點,我有固定的這個像這樣(沒有經過充分測試它尚未因爲我沒有在目前可用的第二個網絡):

我延長了廣播接收器類

private class NetworkSwitcher extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { 
      return; 
     } 
     NetworkInfo networkInfo = 
      (NetworkInfo)intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     if (networkInfo.isConnected()) { 
      if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) { 
       Log.d(TAG, "Network type: " + networkInfo.getTypeName() + 
         " Network subtype: " + networkInfo.getSubtypeName()); 
       getOwnIpAddress(); 
       mClient.updateUnicastSocket(mOwnAddress, mUnicastPort); 
      } 
     } 
     else { 
      Log.e(TAG, "Network connection lost"); 
     } 
    } 
} 

我註冊這個類作爲與設置爲ConnectivityManager.CONNECTIVITY_ACTION意圖(其設置在onResume()onPause()釋放它)的過濾器的接收器。這應該捕獲任何自動Wi-Fi網絡交換機。 getOwnIpAddressWifiManager中檢索設備的IP地址。

我還發現它在我從其他活動返回到活動時起作用。

+1

我意識到這是公認的(由OP),但我不認爲它會工作。文檔建議使用WifiManager而不是ConnectivityManager來描述您所描述的內容,因此您可以使用WifiManager.NETWORK_STATE_CHANGED_ACTION,但我不確定是否即使這樣做也能解決問題:當您的客戶端從一個BSSID漫遊到下一個時通知您(如果我正確地理解了這個問題)。 – Tom 2013-02-07 04:02:56

+0

這實際上可能是一個更好的解決方案。雖然我不再在這個應用程序上工作(可能在未來也是如此)。如果我知道WifiManager,我也會嘗試。 – ThaMe90 2013-02-07 07:41:58

+0

'WifiManager.NETWORK_STATE_CHANGED_ACTION'將完全按照@Tom的說法在[Documentation]中提及(http://developer.android.com/reference/android/net/wifi/WifiManager.html#NETWORK_STATE_CHANGED_ACTION) – Sdghasemi 2015-12-10 19:34:40