android_lottery_wifi_ethernet局部修改
来源:互联网 发布:php 记录日志 编辑:程序博客网 时间:2024/05/22 07:59
1、 getNetworkParameters 能获取wifi的静态IP值?还是所有IP信息,包括IP、网关……?
答:所有IP信息,包括IP、网关……
存在的问题:
2、问题描述:这是设置的IP信息
getNetworkParamete发现dns2的值到dns1上了,是错开的!并且dns2没有设置成功和实现。
3、造成的原因是:
4、分析:
首先:从下面看getNetworkParameters()方法中的代码看似没问题。
getNetworkParameters里面WiFi部分代码,我看着,没啥问题啊,难道是set里面有问题?
发现造成 dns2的值改变了dns1的值,是由“造成原因”引起的。
5、修改步骤:
5.1 将public boolean wifiSetStaticIp(int mode, Intent intent){}方法中的
注释掉就行了,set dns1后 get 的就是dns1
出现昨天的问题,我感觉是因为设置dns1,保存后,再设置dns2就把dns1所存在的地方给修改了,但是不知道为什么设置dns1的方法,不能用到设置dns2上呐
这都是设置的dns1,再调用一遍,应该就是修改系统里面的dns1位置上的值!
从结果看 是这样。
5.2注意查下Android系统手机(不要看成苹果IOS),是不是wifi的dns只有一个,不存在dns1和dns2的说法。如果只有一个dns,那也能解释dns2设置了,也是设置的dns1,也就是说两次设置dns都是对应一个
dns
查看手机发现:
如果设置了可以正常上网, 那就应该可以设置两个dns?答:能正常上网。
public boolean wifiSetStaticIp(int mode, Intent intent){}中放开dns2的注释
然后在 private static void setDNS(InetAddress dns,WifiConfiguration wifiConf)}中
就行了,Dns1,Dns2就没问题了!
注意在写if ( mDnses.size() == 2) {
mDnses.clear();
}
mDnses.clear();
}
是不对的,因为,程序第一次调用该该代码时,mDnses中没有内容,mDnses为null;所以mDnses.size()一开始会出错,造成修改WiFi静态setNetworkMode()返回FALSE。
并且修改静态IP失败。
完整代码如下:
public boolean wifiSetStaticIp(int mode, Intent intent){boolean res = false;WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);WifiConfiguration wifiConfig = null;WifiInfo connectionInfo = wifiManager.getConnectionInfo(); //得到连接的wifi网络List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();for (WifiConfiguration conf : configuredNetworks) {if (conf.networkId == connectionInfo.getNetworkId()) {wifiConfig = conf;Log.i(TAG,""+connectionInfo.getIpAddress());break;}}if (mode < 0 || mode > 2)return res;try {Log.e(TAG, "wifiSetStaticIp entry ");setIpAssignment("STATIC", wifiConfig);// 设置wifi为静态ip分配方式setIpAddress(InetAddress.getByName(intent.getStringExtra("ip")), 24, wifiConfig);//192.168.191.2//Constructor<?> linkAddressConstructor = LinkAddress.class.getDeclaredConstructor(String.class); //LinkAddress linkAddress = (LinkAddress) linkAddressConstructor.newInstance(intent.getStringExtra("ip"));//setMask(InetAddress.getByName(intent.getStringExtra("mask")),wifiConfig);setGateway(InetAddress.getByName(intent.getStringExtra("gateway")), wifiConfig); setDNS(InetAddress.getByName(intent.getStringExtra("dns1")), wifiConfig); setDNS(InetAddress.getByName(intent.getStringExtra("dns2")), wifiConfig); //没起作用wifiManager.updateNetwork(wifiConfig); // apply the settingtry {Runtime.getRuntime().exec("xbsu -c netcfg wlan0 down");Runtime.getRuntime().exec("xbsu -c netcfg wlan0 up");//可用netcfg看一下Log.i(TAG,"static ip up");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}return true;}catch(Exception e) {e.printStackTrace();return false;}}
//设置域名解析服务器 private static void setDNS(InetAddress dns,WifiConfiguration wifiConf) throws SecurityException,IllegalArgumentException,NoSuchFieldException,IllegalAccessException{ Object linkProperties=getField(wifiConf,"linkProperties"); if(linkProperties==null) { return; } ArrayList<InetAddress> mDnses=(ArrayList<InetAddress>)getDeclaredField(linkProperties,"mDnses"); ; //清除原有Dns设置(如果只想增加,不想清除,此句可省略) // mDnses.clear(); //增加新的DNS if (mDnses != null && mDnses.size() == 2) { mDnses.clear(); } mDnses.add(dns); }
7、收获:
这里是用了一种反射机制。然后,第一个setDns()调用时,setDns方法中ArrayList 变量mDnse 和第二次调用setDns()时,setDns方法中 的ArrayList mDnses是同一个变量。
这个跟 new 不一样。要是new的话,两次调用setDns方法会生成不同的mDns。
改成:
就可以,两次setDns()后,mDnses中有两个元素了,等第三次SetDns后,判断size为2,就会把mDnses中的清空,重新放dns1和dns2。
反正改成后来的那样!!就可以控制到size为2,每2一循环。
永远是放在前两个位置。
8、总结
遗留问题如下:
0 0
- android_lottery_wifi_ethernet局部修改
- android_lottery_wifi_ethernet
- NIO修改文件局部数据
- UIBarButtonItem关于全局修改,局部修改
- 修改网页中局部超链接颜色
- sal 字段的批量局部修改
- 大整数加法(局部修改)
- java 修改文件的局部内容
- 数组越界导致局部变量修改
- Maven修改全局和局部JDK版本
- Maven修改全局和局部JDK版本
- javaNIO局部修改文件中指定位置的部分数据
- 092.Block And Var 块中修改局部变量
- 092.Block And Var 块中修改局部变量
- 辛星浅析mysql中的单词的局部修改
- es 获取内部版本号,jest 局部更新代码修改
- JS中局部变量能修改全局变量吗?
- 局部变量和全局变量的保证未修改性
- React-Native真机运行错误
- 数组之找出数组中唯一重复的元素
- HTMl与CSS
- Yii2 console命令行无法连接数据库
- Androd6.0 CameraService服务启动流程
- android_lottery_wifi_ethernet局部修改
- dev 控件汉化
- 提示键盘锁定大写jQuery代码
- ubuntu下用eclipse编译opencv程序(超级详细)
- 关于Ctrl-C中断无限循环程序的记录
- input框输入限制
- Dalvik和ART的GC区别
- win10 安装 Cygwin
- Dubbo与Zookeeper、Spring整合使用