EthernetManager Android 以太网静态IP设置
来源:互联网 发布:浙师大行知学院新生 编辑:程序博客网 时间:2024/06/10 01:23
关于以太网设置
由于公司的需求,需要在项目中加入设置以太网静态IP的功能,在网上找了一下,发 现这方面的资料比较少最后只找到了一个demo,但是导入后发现项目报错.
之后查了一下资料才发现原来EthernetManager是谷歌隐藏的API,关于隐藏API的调用,可以去看下下面这篇文章:
如何调用Android隐藏API
废话不多说先上代码
// 监听以太网状态的广播,包括网线插拔和以太网开关 private IntentFilter mIntentFilter; private final BroadcastReceiver mReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent){ String action = intent.getAction(); // 当以太网状态改变 if (action.equals(EthernetDataTracker.ETHERNET_STATE_CHANGED_ACTION)){ // 取得当前以太网状态 int state = intent.getIntExtra(EthernetDataTracker.EXTRA_ETHERNET_STATE, 0); // 根据当前以太网状态取得信息 switch (state) { case EthernetDataTracker.ETHER_STATE_CONNECTED: //已连接// Utils.showToast(context, "Ethernet以连接----"+isEthernet); if (isEthernet) { //防止接收到广播后直接跳转了 pdb.dismiss(); isNetworkAvailable(context); } break; case EthernetDataTracker.ETHER_STATE_DISCONNECTED: //未连接// Utils.showToast(context, "Ethernet未连接");// isEthernet = false; break; } getEthInfo(state); //根据以太网状态取得以太网信息 } } };
上面的代码有些项目中自己封装的方法,不要太在意.以太网的状态主要分为静态IP,和动态IP的,下面的方法主要是根据不同的状态来获取以太网的信息的.
public void getEthInfo(int state){ if (state == EthernetDataTracker.ETHER_STATE_DISCONNECTED{ // 如果以太网未连接 } else{ ContentResolver contentResolver = context.getContentResolver(); // 是否使用静态IP int useStaticIp = System.getInt(contentResolver, System.ETHERNET_USE_STATIC_IP, 0); if (useStaticIp == 1){ // 如果是静态的 // 取得静态IP mEthIpAddress = System.getString(contentResolver, System.ETHERNET_STATIC_IP); // 取得静态子网掩码 mEthNetmask = System.getString(contentResolver, System.ETHERNET_STATIC_NETMASK); // 取得静态网关 mEthGateway = System.getString(contentResolver, System.ETHERNET_STATIC_GATEWAY); // 以下两种方式均可取得dns // 取得dns1 mEthdns1 = System.getString(contentResolver, System.ETHERNET_STATIC_DNS1); // 取得dns2 mEthdns2 = System.getString(contentResolver, System.ETHERNET_STATIC_DNS2); } else{ String tempIpInfo; String iface = mEthManager.getEthernetIfaceName(); // 取得动态IP地址 tempIpInfo = SystemProperties.get("dhcp." + iface + ".ipaddress"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))){ mEthIpAddress = tempIpInfo; } else{ mEthIpAddress = ""; } // 取得动态子网掩码 tempIpInfo = SystemProperties.get("dhcp." + iface + ".mask"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))){ mEthNetmask = tempIpInfo; } else{ mEthNetmask = ""; } // 取得动态网关 tempIpInfo = SystemProperties.get("dhcp." + iface + ".gateway"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))){ mEthGateway = tempIpInfo; } else{ mEthGateway = ""; } // 取得动态dns1 tempIpInfo = SystemProperties.get("dhcp." + iface + ".dns1"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))){ mEthdns1 = tempIpInfo; } else{ mEthdns1 = ""; } // 取得动态dns2 tempIpInfo = SystemProperties.get("dhcp." + iface + ".dns2"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))){ mEthdns2 = tempIpInfo; } else{ mEthdns2 = ""; } } }}
获取到信息之后接下来就是设置静态IP了
// 方便取出相关的信息,数组里索引从小打大对应的意思见名知意private String[] mSettingNames = { System.ETHERNET_STATIC_IP, System.ETHERNET_STATIC_GATEWAY, System.ETHERNET_STATIC_NETMASK, System.ETHERNET_STATIC_DNS1, System.ETHERNET_STATIC_DNS2 };/*设置静态IP的方法,*/System.putString(contentResolver, mSettingNames[i], text);// 保存 "是否使用静态 IP" 的配置System.putInt(contentResolver, System.ETHERNET_USE_STATIC_IP, 1);
当然了这还不算完,有一点比较坑的地方就是,你必须要保证你输入的IP值是正确的IP格式,比如你要是输入个1或者其他不符合IP地址格式的值那么悲剧很可能就要发生了,你的系统很可能就会变砖了
下面附上有效IP地址的判断:
/** * 返回 指定的 String 是否是 有效的 IP 地址. */ public static boolean isValidIpAddress(String value) { int start = 0; int end = value.indexOf('.'); int num = 0; while (start < value.length()) { if (-1 == end) { end = value.length(); } try { int block = Integer.parseInt(value.substring(start, end)); if ((block > 255) || (block < 0)) { return false; } } catch (NumberFormatException e) { return false; } num++; start = end + 1; end = value.indexOf('.', start); } return num == 4; }
注意:一定要判断是否是有效的IP地址,还有设置完IP地址后重启下以太网才会生效
mEthManager.setEthernetEnabled(true); // 开启以太网
最后说下权限问题
<!-- android:sharedUserId="android.uid.system" 使其成为系统应用-->使用这个权限需要系统对应的三个文件:signapk.jarplatform.x509.pem platform.pk8并在cmd中用以下命令签名java -jar signapk.jar platform.x509.pem platform.pk8 pubwin_box_v1.1.apk pubwin_box_v1.1_signed.apk
以太网需要使用的jar包下载
0 0
- EthernetManager Android 以太网静态IP设置
- Android客制化------设置以太网静态IP
- Android 操作以太网,监听网线插拔和以太网开关,设置以太网静态IP等。
- android设置以太网ip
- Android 7.0 增加以太网设置DHCP和静态IP
- Android 7.0 增加以太网设置DHCP和静态IP
- Android Ethernet以太网使用静态IP
- Android 系统在程序中设置以太网的DHCP 和静态IP
- Android静态IP设置
- Android 以太网Ethernet DHCP和静态设置实现
- 反射设置android6.0 以太网的打开和设置静态Ip,不用导源码包
- 修改Android5.1源码,配置以太网设置默认为静态ip
- android平板以太网设置
- Android 修改 以太网 IP地址
- Android 4.0下设置静态IP
- Android 4.0静态IP设置方法
- Android 静态ip的dns设置
- ubuntu设置静态IP
- xxxx
- HDU.3007 Buried memory
- 使用Genymotion时无法下载虚拟机文件
- jquery easyui datagrid使用参考
- html缓存html,css,js等
- EthernetManager Android 以太网静态IP设置
- Google 2016 面试题6 | Count of Smaller Numbers After Self(数组计数)
- Redis配置详解
- a's'd'f
- 每日一linux命令(41)-------route命令
- 排序问题,升序和降序
- gethostname()函数出错,但返回success的问题解决
- 图片理解Android消息机制
- 数据结构与算法笔记(三)反转部分链表