wifi代理、静态ip设置无效解决

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峥嵘life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值