如何检测网络中的变化?

时间:2011-06-03 07:55:30

标签: android networking

我需要知道如何检测Wi-Fi网络中的交换机,虽然是自动或手动,但这并不重要。当检测到开关时,整个系统是否有某种意图被广播?或者我是否必须通过调用ConnectivityManager上的方法手动检查是否选择了新网络?

1 个答案:

答案 0 :(得分:7)

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

我扩展了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地址。

我还发现当我从另一个活动返回活动时它会起作用。