Android中的wifi.getDhcpInfo()返回错误的IP网关

use*_*108 5 android dhcp wifi

我正在编写一个 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)
  • 我还没有测试过这个解决方案,这只是一个建议,所以如果它不起作用,请告诉我