На данный момент я исправил это следующим образом (еще не полностью протестировал, так как в данный момент у меня нет второй доступной сети):
Я расширил класс 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
.
Я также обнаружил, что это работает, когда я возвращаюсь к активности из другой деятельности.