我正在编写一个 Android 应用程序,它需要根据用户的选择连接到不同的 Wifi 网络。我需要从 networkInfo 中检索网关 IP 地址。我面临的问题是,如果我连接到wifi网络配置A,然后想切换到网络配置B,wifi.getDhcpInfo(); 返回网络A的网关IP地址。通过用户界面工作流多次尝试后,最终返回网络B的网关IP。代码片段如下。如何确定新启用的网络何时返回准确的 DHCP 信息以便我能够可靠地获取它的任何想法。例如,是否有我可以捕获的异步事件等。谢谢。
WifiConfiguration config = wifiConfiguredNetworks.get(SSID);
enableNetworkResult = false;
enableNetworkResult = wifi.enableNetwork(config.networkId,true);
if (enableNetworkResult == true) {
this.networkInfo = wifi.getDhcpInfo(); // does not return proper IP info
this.DeviceIP = android.text.format.Formatter.formatIpAddress(networkInfo.gateway);
}
Run Code Online (Sandbox Code Playgroud)
Rai*_*aiv -1
尝试在监听 WIFI_STATE_CHANGED 事件时捕获 WifiManager.WIFI_STATE_ENABLED - 此状态将在所有连接过程完成后出现,因此在此阶段应正确设置网关 ip。
这应该转到你的onResume函数:
IntentFilter filter = new IntentFilter();
filter.addAction("android.net.wifi.WIFI_STATE_CHANGED");
this.registerReceiver(networkStateListener, filter);
Run Code Online (Sandbox Code Playgroud)
这个-到onPause
this.unregisterReceiver(networkStateListener);
Run Code Online (Sandbox Code Playgroud)
这是接收器本身
BroadcastReceiver networkStateListener = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(BroadcastReceiver.class.getSimpleName(), "action: "
+ intent.getAction());
int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,-1);
isNetworkAvailable =state == WifiManager.WIFI_STATE_ENABLED;
// here you can get gateway address
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2847 次 |
| 最近记录: |