Как обнаружить изменения в сети? - PullRequest
1 голос
/ 03 июня 2011

Мне нужно знать, как я могу обнаружить коммутатор в сетях Wi-Fi, хотя это автоматически или вручную, это не важно. Есть ли какое-то намерение транслироваться по всей системе при обнаружении коммутатора? Или мне нужно вручную проверять, выбрана ли новая сеть, вызывая метод в ConnectivityManager?

1 Ответ

7 голосов
/ 03 июня 2011

На данный момент я исправил это следующим образом (еще не полностью протестировал, так как в данный момент у меня нет второй доступной сети):

Я расширил класс 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. getOwnIpAddress извлекает IP-адрес устройства из WifiManager.

Я также обнаружил, что это работает, когда я возвращаюсь к активности из другой деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...