2011-06-03 69 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