我需要知道如何检测Wi-Fi网络中的交换机,尽管是自动或手动的,这并不重要。检测到交换机时,整个系统是否有某种意图被广播?还是必须通过调用ConnectivityManager上的方法手动检查是否选择了新网络?如何检测网络中的变化?
回答
在这个时间点,我有固定的这个像这样(没有经过充分测试它尚未因为我没有在目前可用的第二个网络):
我延长了广播接收器类
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网络交换机。 getOwnIpAddress
从WifiManager
中检索设备的IP地址。
我还发现它在我从其他活动返回到活动时起作用。
我意识到这是公认的(由OP),但我不认为它会工作。文档建议使用WifiManager而不是ConnectivityManager来描述您所描述的内容,因此您可以使用WifiManager.NETWORK_STATE_CHANGED_ACTION,但我不确定是否即使这样做也能解决问题:当您的客户端从一个BSSID漫游到下一个时通知您(如果我正确地理解了这个问题)。 – Tom 2013-02-07 04:02:56
这实际上可能是一个更好的解决方案。虽然我不再在这个应用程序上工作(可能在未来也是如此)。如果我知道WifiManager,我也会尝试。 – ThaMe90 2013-02-07 07:41:58
'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
- 1. 如何使用可达性检测网络中的变化?
- 2. 如何检测iOS中的WiFi网络变化
- 3. 在iPad上检测wifi网络变化
- 4. CentOS服务器:如何检测网络状态变化
- 5. 检测网页中的变化区域
- 6. 广播接收器检测到变化的移动网络
- 7. 如何检测Android中塔的变化?
- 8. 如何检测iOS中的SIM变化
- 9. 如何检测youtube中的变化getCurrentTime()?
- 10. 检测网络是否改变?
- 11. PHP如何检测变量的变化?
- 12. 如何检测变量的变化?
- 13. 不断检查无线网络变化
- 14. 如何检测VB.NET中数据网格的变化
- 15. 如何检测网络断开连接?
- 16. 如何检测网络空闲时间?
- 17. 如何在网络上检测iPhone?
- 18. 如何自动检测网络中的子网数
- 19. 网络摄像机,如何在网络上检测它?
- 20. 如何检测当前的网址当发生任何变化
- 21. 如何捕捉无线网络变化?
- 22. Java如何检测变量变化
- 23. 如何检测RadioNodeList的值的变化?
- 24. 检测变化
- 25. 检测任何连接的网络
- 26. 检测任何连接网络的人
- 27. 如何检测/etc/init.d脚本中的网络初始化时间?
- 28. 如何检测DOM属性的变化?
- 29. 如何检测屏幕上的变化?
- 30. 如何从mainactivity检测的ListView变化
[检测3G或Wifi网络恢复]的可能的副本(http://stackoverflow.com/questions/4503561/detect-3g-or-wifi-network-restoration) – Reno 2011-06-03 08:07:57
这个问题似乎回答如何检测是否一个网络一般连接或断开。我需要知道网络之间何时发生切换。 – ThaMe90 2011-06-03 08:18:06
您可以使用相同的代码。如果类型为Wifi,请使用NetworkInfo获取[EXTRA_](http://developer.android.com/reference/android/net/wifi/WifiManager.html)数据。例如,对于各种WiFi n/w,BSSID应该不同 – Reno 2011-06-03 08:36:21