Я обнаружил странное поведение в Android WiFi API.Мне нужно получить удаленный IP-адрес после установления соединения WiFi для подключения к сокету на маршрутизаторе.Но, к сожалению, я получаю неопределенное поведение.
Предположим, у меня есть 3 точки доступа в пределах досягаемости:
В настоящее время я подключился к NET1 и хочу переключиться на NET3.
Здесь я подключаюсь к Wi-Fi:
WifiConfiguration wifiConfig = new WifiConfiguration();
wifiConfig.SSID = "NET3";
...
int netId = m_manager.addNetwork(wifiConfig);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
m_context.registerReceiver(mWifiConnectReceiver, intentFilter);
m_manager.disconnect();
m_manager.enableNetwork(networkID, true);
m_manager здесь WifiManager
.
Для получения события WiFi у меня есть следующий код:
private final BroadcastReceiver mWifiConnectReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context c, Intent intent) {
NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
Log.i("MyApp","--------------------------");
Log.i("MyApp", info.getDetailedState() + ", " + info.getExtraInfo());
String ssid = m_manager.getConnectionInfo().getSSID();
ssid = ssid.replaceAll("^\"(.*)\"$", "$1");
Log.i("MyApp","SSID: " + ssid);
}
});
После подключения вывод выглядит следующим образом:
05-21 11:36:02.081 : CONNECTED, "NET1"
05-21 11:36:02.094 : SSID: NET3
05-21 11:36:02.095 : --------------------------
05-21 11:36:02.095 : CONNECTED, <unknown ssid>
05-21 11:36:02.098 : SSID: NET3
05-21 11:36:02.098 : --------------------------
05-21 11:36:02.098 : DISCONNECTED, <unknown ssid>
05-21 11:36:02.100 : SSID: NET3
05-21 11:36:02.100 : --------------------------
05-21 11:36:02.100 : DISCONNECTED, <unknown ssid>
05-21 11:36:02.104 : SSID: NET3
05-21 11:36:02.104 : --------------------------
05-21 11:36:02.104 : DISCONNECTED, <unknown ssid>
05-21 11:36:02.105 : SSID: NET3
05-21 11:36:02.107 : --------------------------
05-21 11:36:02.107 : DISCONNECTED, "NET1"
05-21 11:36:02.112 : SSID: NET3
05-21 11:36:02.112 : --------------------------
05-21 11:36:02.112 : CONNECTING, "NET1"
05-21 11:36:02.115 : SSID: NET3
05-21 11:36:02.240 : --------------------------
05-21 11:36:02.240 : CONNECTING, "NET3"
05-21 11:36:02.244 : SSID: NET3
05-21 11:36:02.245 : --------------------------
05-21 11:36:02.245 : CONNECTING, "NET3"
05-21 11:36:02.248 : SSID: NET3
05-21 11:36:02.308 : --------------------------
05-21 11:36:02.308 : OBTAINING_IPADDR, "NET3"
05-21 11:36:02.311 : SSID: NET3
05-21 11:36:07.885 : --------------------------
05-21 11:36:07.885 : CONNECTED, "NET3"
05-21 11:36:07.887 : SSID: NET3
05-21 11:36:07.903 : --------------------------
05-21 11:36:07.903 : CONNECTED, "NET3"
05-21 11:36:07.906 : SSID: NET3
И здесь я вижу много несоответствий:
- Первый CONNECTED озадачивает - почему он здесь?NET1 уже подключен.Почему, когда я подключаюсь к NET3, он запускает CONNECTED для NET1?
- Почему
NetworkInfo
сообщает NET1 (и это правильно), а getConnectionInfo () сообщает NET3 ?? - И вопрос, который меня беспокоит больше всеговсего - как я могу определенным образом обнаружить соединение с предлагаемой сетью?Возможно ли извлечь SSID из
NetworkInfo
?
Обновлено
Я обнаружил, что следующий код возвращает правильный SSID:
WifiInfo wifiInfo = intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
if(wifiInfo != null) {
String ssid = wifiInfo.getSSID();
ssid = ssid.replaceAll("^\"(.*)\"$", "$1");
}
Может быть, это может быть пользователь вместо m_manager.getConnectionInfo().getSSID()
.