wifi代理、静态ip设置无效解决
文章目录
一、前言
Android 系统中如果是自己开发的应用,需要连接网络设置静态ip或者代理信息,
可能会出现设置的代理信息后无效的情况,
自己应用配置的代理信息,在原生Settings也能同步显示,
但是浏览器并没有更新代理设置的信息,
比如设置代理后不弹框提示代理登录,需要关开一次wifi才生效,
或者关闭代理后依然弹框提示代理登录,需要关开一次wifi才生效,
具体原因是网络信息没有被重新加载。
这里简单记录一下。
二、wifi 设置代码或者静态ip代码
wifi 设置某个ip代理的主要代码:
WifiConfiguration config = getConfig(); //重新创建或者获取之前的config对象
//Android13 或者更新版本 创建对象 IpConfiguration 只能传空参数的构造方法:
IpConfiguration ipConfiguration = new IpConfiguration();
//静态ip相关数据和代理相关数据
//静态配置,静态默认是:DHCP,如果是静态ip:IpAssignment.STATIC;
mIpAssignment = IpConfiguration.IpAssignment.DHCP;
//静态ip,才有必要设置,否则传入null即可
mStaticIpConfiguration = null;
//代理设置,分为NONE无/MANUAL手动/PAC自动
mProxySettings =IpConfiguration.ProxySettings.STATIC;//无:ProxySettings.NONE; 自动:ProxySettings.PAC
//手动代理最为常见,需要填入三个数据:host为主机名称,port为服务器端口,exclusionList为绕过的地址(多个的情况可使用,号分隔)
//这里设置代理 ip
mHttpProxy = ProxyInfo.buildDirectProxy("hostname", port,"exclusionList");
ipConfiguration.setIpAssignment(mIpAssignment);
ipConfiguration.setStaticIpConfiguration(mStaticIpConfiguration);
//上面两个信息是和静态ip设置相关,下面设置两个是和代理ip设置相关
ipConfiguration.setProxySettings(mProxySettings);
ipConfiguration.setHttpProxy(mHttpProxy);
config.setIpConfiguration(ipConfiguration);
三、wifi代理设置无效解决
思路:wifi 设置代理后要断开一次重新连接才能生效。
主要代码如下:
// mWifiManager.disableNetwork(config.networkId);//这个可能没用!
mWifiManager.disconnect();
mWifiManager.connect(config, mConnectListener);
WifiConfiguration 的 networkId 数值,有可能不是正确的id;
networkId 是从0 开始,每次连接不同的网络数值不断加1;
而Connectivity network 的id是从100 开始,每次连接不同的网络数值不断加1;
使用 WifiManager.disconnect() 会断开所有的网络,这个就没有问题了。
wifi 重新连接后,networkid是否改变了,可以用下面adb 相关命令查看。
四、其他
1、dumpsys connectivity 部分主要日志信息
dumpsys connectivity 可以查看当前网络的相关信息
console:/ # dumpsys connectivity | grep network
Active default network: 105
Current network preferences:
//network id 和连接状态
NetworkAgentInfo{network{105} handle{3194566397965} ni{WIFI CONNECTED extra: }
created=2024-07-01T12:15:02.164Z
Score(Policies : TRANSPORT_PRIMARY&EVER_EVALUATED&IS_UNMETERED&EVER_USER_SELECTED ; KeepConnected : 0)
//ip地址 和mac地址
lp{{InterfaceName: wlan0
LinkAddresses: [ fe80::81f9:6713:25f4:6f8b/64,192.168.31.15/24 ] DnsAddresses: [ /192.168.31.1 ]
//代理信息:192.168.8.215,端口号;8818
Routes: HttpProxy: [192.168.8.215] 8818 xl=}}
//wifi对象的其他信息,名称,mac地址等信息
<WifiNetworkAgentSpecifier [WifiConfiguration=, SSID="xm5G",
BSSID=8c:53:c3:53:c6:59, band=2, mMatchLocalOnlySpecifiers=false]>
TransportInfo: <SSID: "xm5G", BSSID: 8c:53:c3:53:c6:59,
MAC: c0:e5:da:ec:a3:0c, IP: /192.168.31.15, Security type: 0,
Supplicant state: COMPLETED, Wi-Fi standard: 5, RSSI: -49,
Link speed: 585Mbps, Tx Link speed: 585Mbps,
Max Supported Tx Link speed: 866Mbps,
Rx Link speed: -1Mbps, Max Supported Rx Link speed: 866Mbps,
Frequency: 5785MHz, Net ID: 2, Metered hint: false, score: 60,
isUsable: true, CarrierMerged: false, ...
console:/ #
...
上面的日志信息可以看到:
network 的id值,当前连接的ip地址,wifi名称,代理信息,score值等信息。
2、Android10 系统应用wifi连接和静态ip代理设置
之前写的wifi 设置静态ip和代理信息的代码:
https://blog.csdn.net/wenzhi20102321/article/details/123675077
3、Android adb查看网络连接情况
Android 使用adb查看网络使用情况主要的adb命令:
1、adb shell ifconfig
2、adb shell dumpsys connectivity
3、adb shell netstat
3、adb shell ip ru
详解:
https://blog.csdn.net/wenzhi20102321/article/details/122161589