【问题标题】:How to detect changes in the network?如何检测网络的变化?
【发布时间】:2011-09-07 15:24:02
【问题描述】:

我需要知道如何检测 Wi-Fi 网络中的开关,不管是自动还是手动,都没有关系。当检测到开关时,是否会在整个系统中广播某种意图?还是我必须通过调用 ConnectivityManager 上的方法来手动检查是否选择了新网络?

【问题讨论】:

  • 该问题似乎回答了如何检测一般网络是否连接或断开。我需要知道网络之间的切换何时发生。
  • 您可以使用相同的代码。如果类型为 Wifi,则使用 NetworkInfo 获取EXTRA_ 数据。例如,对于各种 WiFi n/ws,BSSID 应该不同
  • 如果我没记错的话,这将涉及缓存当前网络的 BSSID 并将其与新的 BSSID 进行比较?如果是这样,我宁愿不要,因为我只需要更新网络交换机来检索新的 IP 地址......我不需要知道网络的 BSSID。
  • 是的,但这是最简单的判断方法

标签: android networking


【解决方案1】:

此时,我已经修复了这个问题(尚未完全测试,因为我目前没有第二个网络可用):

我扩展了 BroadcastReceiver 类

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 地址。

我还发现当我从另一个活动返回到该活动时它也可以工作。

【讨论】:

  • 我意识到这是被 OP 接受的,但我认为它不会起作用。文档建议使用 WifiManager 而不是 ConnectivityManager 来进行您描述的那种事情,因此您将使用 WifiManager.NETWORK_STATE_CHANGED_ACTION,但我不确定即使这样是否也能解决问题:当您的客户端从一个 BSSID 漫游到下一个 BSSID 时通知您(如果我正确理解了这个问题)。
  • 这实际上可能是一个更好的解决方案。虽然我不再在这个应用程序上工作了(尽管将来可能会再次)。如果我知道 WifiManager,我也会尝试的。
  • WifiManager.NETWORK_STATE_CHANGED_ACTION 将完全按照@Tom 在Documentation 中所说和提到的那样做事
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多