/*** 设置WiFi静态ip等配置** @param context* @param ip* @param gateWay* @param dns1* @param dns2*/
public boolean changeWifiConfiguration(Context context,String ssid, String ip, String netMask, String gateWay, String dns1, String dns2) {try {InetAddress inetAddr = InetAddress.getByName(ip);int prefixLength =submaskStr2PrefixLen(netMask);InetAddress gatewayAddr = InetAddress.getByName(gateWay);if (TextUtils.isEmpty(dns1)){dns1="0.0.0.0";}InetAddress dns1Addr = InetAddress.getByName(dns1);if (TextUtils.isEmpty(dns2)){dns2="0.0.0.0";}InetAddress dns2Addr = InetAddress.getByName(dns2);//取得所有构造函数Class[] cl = new Class[]{InetAddress.class, int.class};Class<?> clazz = Class.forName("android.net.LinkAddress");Constructor cons = clazz.getConstructor(cl);if (cons == null) {return false;}//给传入参数赋初值Object[] x = {inetAddr, prefixLength};//构造StaticIpConfiguration对象Class<?> staticIpConfigurationCls = Class.forName("android.net.StaticIpConfiguration");//实例化StaticIpConfigurationObject staticIpConfiguration = null;staticIpConfiguration = staticIpConfigurationCls.newInstance();Field ipAddress = staticIpConfigurationCls.getField("ipAddress");Field gateway = staticIpConfigurationCls.getField("gateway");Field dnsServers = staticIpConfigurationCls.getField("dnsServers");//设置ipAddressipAddress.set(staticIpConfiguration, (LinkAddress) cons.newInstance(x));//设置网关gateway.set(staticIpConfiguration, gatewayAddr);//设置dnsArrayList<InetAddress> dnsList = (ArrayList<InetAddress>) dnsServers.get(staticIpConfiguration);dnsList.add(dns1Addr);dnsList.add(dns2Addr);WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);WifiConfiguration wifiConfig = null;//得到连接的wifi网络WifiInfo connectionInfo = wifiManager.getConnectionInfo();if (!connectionInfo.getSSID().equals("\"" + ssid + "\"")) {return false;}@SuppressLint("MissingPermission")List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();for (WifiConfiguration conf : configuredNetworks) {if (conf.networkId == connectionInfo.getNetworkId()) {wifiConfig = conf;break;}}@SuppressLint("PrivateApi")Class ipAssignmentCls = Class.forName("android.net.IpConfiguration$IpAssignment");Object ipAssignment = Enum.valueOf(ipAssignmentCls, "STATIC");Method setIpAssignmentMethod = wifiConfig.getClass().getDeclaredMethod("setIpAssignment", ipAssignmentCls);setIpAssignmentMethod.invoke(wifiConfig, ipAssignment);if (null==wifiConfig.getClass()){return false;}Method setStaticIpConfigurationMethod = wifiConfig.getClass().getDeclaredMethod("setStaticIpConfiguration", staticIpConfiguration.getClass());//设置静态IP,将StaticIpConfiguration设置给WifiConfigurationsetStaticIpConfigurationMethod.invoke(wifiConfig, staticIpConfiguration);//WifiConfiguration重新添加到WifiManagerint netId = wifiManager.addNetwork(wifiConfig);wifiManager.disableNetwork(netId);boolean flag = wifiManager.enableNetwork(netId, true);return flag;} catch (Exception e) {e.printStackTrace();return false;}
}/*** 将string类型的子网掩码转为prefixLength,代码如下*/
public static int submaskStr2PrefixLen(String maskStr) throws Exception{StringBuffer sb;String str;int inetmask = 0;int count = 0;//检查子网掩码的格式Pattern pattern = Pattern.compile("(^((\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.){3}(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$)|^(\\d|[1-2]\\d|3[0-2])$");if (null!=pattern){Matcher matcher = pattern.matcher(maskStr);if (null!=matcher){boolean matches = matcher.matches();if (matches==false){return 0;}}}String[] ipSegment = maskStr.split("\\.");for (int n = 0; n < ipSegment.length; n++) {sb = new StringBuffer(Integer.toBinaryString(Integer.parseInt(ipSegment[n])));str = sb.reverse().toString();count = 0;for (int i = 0; i < str.length(); i++) {i = str.indexOf("1", i);if (i == -1) {break;}count++;}inetmask += count;}return inetmask;
}

如上,设置的子网掩码一直都是0

设置WiFi静态ip、网关、子网掩码、dns相关推荐

  1. Android设置WIFI静态IP

    想要在代码中实现设置WIFI静态IP需要有系统权限,要在manifest文件添加android:sharedUserId="android.uid.system",还要有系统签名. ...

  2. 安卓9.0设置WIFI静态IP地址。

    简单的一个函数实现对wifi设置静态或动态IP地址. 一.需要的权限 <uses-permission android:name="android.permission.ACCESS_ ...

  3. 集群01之xshell链接liux 更改ip 网关及dns 主机名称

    1. 安装vmware并新建虚拟机指定镜像文件  (简单略过了) 2.设置 ip  网关 用于链接xshell (nat模式) 2.1 右键点击虚拟机设置,确认虚拟机网络为nat 模式 2.2 编辑- ...

  4. win10 设置为静态ip地址

    问题 有时候明明连接了wifi,网络却不能用,这时候需要修改IP地址配置的方式. 解决方法 设置为自动获取IP地址 打开控制面板 → 网络和Internet → 网路共享中心(查看网络状态和任务)→ ...

  5. linux配置ip 网关 和dns(转)

    原文地址:http://blog.csdn.net/ztz0223/article/details/5800665 Linux下面配置ip很容易的,并没有网上说的那么复杂,我的linux系统是rhel ...

  6. 如何设置局域网静态ip地址?

    一.什么是静态ip地址? 静态IP地址即固定IP地址,是长期固定分配给一台计算机使用的IP地址,一般只是作为特殊服务器的电脑才拥有静态IP地址.静态IP地址是手动设置的. 二.设置静态ip地址有什么好 ...

  7. android设置静态i,关于Android4.0系统下如何设置wlan静态ip的设置(转)

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 估计有不少人都以为Android4.0系统下如何设置wlan静态ip地址吧,其实不是Android4.0的问题,只是设置上有点区别而已,下面重新教大家如何 ...

  8. 计算机网络DNS域名配置,如何设置计算机的IP地址和DNS域名服务器

    除了路由器设置之外,在发生的网络问题中,IP地址和DNS设置也是最主要的. 以下是一些我为您编译的设置IP地址和DNS名称服务器的方法. 有帮助! 设置IP地址和DNS域名服务器的方法 与常用的Win ...

  9. 计算机域名DNS设置,电脑的IP地址和DNS域名服务器如何设置

    电脑的IP地址和DNS域名服务器如何设置 在日常生活出现的网络问题中,除了路由器设置之外,IP地址和DNS设置是最突出的,今天yjbys小编给大家整理的一些有关设置IP地址和DNS域名服务器的方法,希 ...

最新文章

  1. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
  2. gitlab 邮件配置(smtp)
  3. web---Tomca安装,Server安装,Tomcat配置
  4. alpha冲刺day12
  5. [Windows编程] #pragma once 和#ifndef ... #define ... #endif 比较
  6. ListableBeanFactory接口
  7. [转]简单介绍如何用Reporting Service制作报表
  8. java 反射用法_Java 反射的概念与使用
  9. c语言读入图片matlab,将数据从matlab文件读入C语言
  10. 一个价值$1.5万的 PS NOW 漏洞
  11. Ugly Numbers UVA - 136
  12. 如何写出整洁规范的R代码?是时候讨论一下代码规范性了
  13. 用matlab做一个有刻度的网格,MATLAB已知坐标如何画网格图
  14. 接收消息服务器配置怎么架设,接收消息服务器配置
  15. linux定时任务生效_linux ( crontab 定时任务命令)
  16. 软考是什么?为什么要考?
  17. Win11如何更改字体样式?Win11更改字体样式的方法
  18. 安装到部署 火绒安全企业新品究竟有多简?
  19. android 错误中英互译,安卓手机Recovery模式刷机情况下的中英文对照翻译
  20. VIT 三部曲 -1 Transformer

热门文章

  1. MTK Camera 开机启动流程
  2. Mp中的or和and
  3. 聊聊 Pulsar: Pulsar 的核心概念与基础架构
  4. 二维正态分布的最大似然估计_最大似然估计-高斯分布
  5. L2-028 秀恩爱分得快(异或+暴力)
  6. JS中offsetTop、clientTop、scrollTop、offsetTop各位置属性详解(含示例图)
  7. 数列极限存在准则:单调有界数列必有极限
  8. 《纽约时报》最新撰文:AI已成必需品,机器人记者正在崛起
  9. 小学生计算机信息教学计划表,小学信息技术教学计划(多篇).doc
  10. jquery图片提示效果