Android 修改盒子路由方式 Static / DHCP

 //操作 盒子WiFi 开关的方法 false 表示关闭  true 表示打开
    public static boolean wifiSwitch(Context context,boolean open){
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        if (wifiManager.isWifiEnabled() && !open) {
            wifiManager.setWifiEnabled(false);
        } else if (!wifiManager.isWifiEnabled() && open){
            wifiManager.setWifiEnabled(true);
        }
        return true;
    }

    //设置盒子 上网路由方式  static/DHCP
    public static void setStaticIP(Context context,String type,String ip) {
        EthernetManager mEthManager = (EthernetManager) context.getSystemService(Context.ETHERNET_SERVICE);
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        switch (type) {
            case "Static":
                StaticIpConfiguration mStaticIpConfiguration = new StaticIpConfiguration();
                String[] split = getDns(HwContext.getContext()).split(" / ");
                for (int i = 0; i < split.length && !TextUtils.isEmpty(split[i]); i++) {
                    InetAddress inetAddress=android.net.NetworkUtils.numericToInetAddress(split[i]);
                    mStaticIpConfiguration.dnsServers.add(inetAddress);
                }
                Inet4Address inetAddr = getIPv4Address(ip);
                int prefixLength = NetUtils.maskStr2InetMask(NetworkUtils.getLanMask(HwContext.getContext()));
                InetAddress gatewayAddr = getIPv4Address(NetworkUtils.getDefaultGateway(HwContext.getContext()));
                if (inetAddr.getAddress().toString().isEmpty() || prefixLength ==0 ) {
                    return ;
                }

                mStaticIpConfiguration.ipAddress = new LinkAddress(ip+"/"+prefixLength);

                mStaticIpConfiguration.gateway=gatewayAddr;
                switch (NetworkUtils.getActiveNetworkType(getContext())) {
                    case "Ethernet":
                        LogUtils.e("Ethernet");
                        IpConfiguration mIpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.NONE, mStaticIpConfiguration, null);
                        mEthManager.setConfiguration("eth0",mIpConfiguration);
                        break;
                    case "WiFi":
                        LogUtils.e("\"WiFi\"");
                        IpConfiguration wifiIpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.STATIC, IpConfiguration.ProxySettings.NONE, mStaticIpConfiguration, null);
                        WifiConfiguration wifiConfiguration = getCurrentConfig();
                        wifiConfiguration.setIpConfiguration(wifiIpConfiguration);
                        wifiManager.setWifiApConfiguration(wifiConfiguration);
                        wifiManager.updateNetwork(wifiConfiguration);
                        new Thread(){// 这里比较耗时 所以开启新线程进行处理
                            @Override
                            public void run() {
                                super.run();
                                int netId = wifiManager.addNetwork(wifiConfiguration);
                                wifiManager.disableNetwork(netId);
                                boolean b = wifiManager.enableNetwork(netId, true);
                            }
                        }.start();
                        break;
                }
                break;
            case "DHCP":
                LogUtils.e("DHCP");
                switch (NetworkUtils.getActiveNetworkType(getContext())){

                    case "Ethernet":
                        LogUtils.e("Ethernet");
                        IpConfiguration ipConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.DHCP, IpConfiguration.ProxySettings.NONE, null, null);
                        mEthManager.setConfiguration("eth0",ipConfiguration);
                        break;

                    case "WiFi":
                        LogUtils.e("DHCP");
                        IpConfiguration wifiIpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.DHCP, IpConfiguration.ProxySettings.NONE, null, null);
                        WifiConfiguration wifiConfiguration = getCurrentConfig();
                        wifiConfiguration.setIpConfiguration(wifiIpConfiguration);
                        wifiManager.setWifiApConfiguration(wifiConfiguration);
                        wifiManager.updateNetwork(wifiConfiguration);
                        new Thread(){// 这里比较耗时 所以开启新线程进行处理
                            @Override
                            public void run() {
                                super.run();
                                int netId = wifiManager.addNetwork(wifiConfiguration);
                                wifiManager.disableNetwork(netId);
                                boolean b = wifiManager.enableNetwork(netId, true);
                            }
                        }.start();
                        break;
                }
                break;
        }
    }
public static int maskStr2InetMask(String maskStr) {
        StringBuffer sb ;
        String str;
        int inetmask = 0;
        int count = 0;
    	/*
    	 * check the subMask format
    	 */
        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 (pattern.matcher(maskStr).matches() == false) {
            Log.e("maskStr2InetMask","subMask is error");
            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;
    }


    public static Inet4Address getIPv4Address(String text) {
        try {
            return (Inet4Address) NetworkUtils.numericToInetAddress(text);
        } catch (IllegalArgumentException|ClassCastException e) {
            return null;
        }
    }

AndroidMenifest文件里添加一下 配置

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL"/>
    <uses-permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
    <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

前提条件  导入 classes.jar  参考 

 如何访问 android系统hide的类或接口_菜鸟xiaowang的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiaowang_lj

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

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

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

打赏作者

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

抵扣说明:

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

余额充值