android 设置dns ip java码

private boolean disp_wifi_info() {
    WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    WifiConfiguration wifiConfig = null;
    WifiInfo connectionInfo = wifiManager.getConnectionInfo();  //得到连接的wifi网络
    Log.i(TAG, "connectionInfo = " + connectionInfo );
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
    Log.i(TAG, "configuredNetworks = " + configuredNetworks );
    for (WifiConfiguration conf : configuredNetworks) {
        Log.i(TAG, "conf = " + conf );
        Log.i(TAG, "conf.networkId = " + conf.networkId );
        if (conf.networkId == connectionInfo.getNetworkId()) {
            wifiConfig = conf;
            break;
        }
    }
    return true;
}




/**
 * 设置静态ip地址的方法
 */
private boolean setIpWithTfiStaticIp() {
    WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    WifiConfiguration wifiConfig = null;
    WifiInfo connectionInfo = wifiManager.getConnectionInfo();  //得到连接的wifi网络
    Log.i(TAG, "connectionInfo = " + connectionInfo );
    List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
    Log.i(TAG, "configuredNetworks = " + configuredNetworks );
    for (WifiConfiguration conf : configuredNetworks) {
        Log.i(TAG, "conf = " + conf );
        Log.i(TAG, "conf.networkId = " + conf.networkId );
        if (conf.networkId == connectionInfo.getNetworkId()) {
            wifiConfig = conf;
            break;
        }
    }

    Log.i(TAG, "android.os.Build.VERSION.SDK_INT = " + android.os.Build.VERSION.SDK_INT );
    if (android.os.Build.VERSION.SDK_INT < 11) { // 如果是android2.x版本的话
        ContentResolver ctRes = mContext.getContentResolver();
        android.provider.Settings.System.putInt(ctRes,
                android.provider.Settings.System.WIFI_USE_STATIC_IP, 1);
        android.provider.Settings.System.putString(ctRes,
                android.provider.Settings.System.WIFI_STATIC_IP,"192.168.0.202");
        // android.provider.Settings.System.putString(ctRes,
        // android.provider.Settings.System.WIFI_STATIC_NETMASK, "255.255.255.0");
        // android.provider.Settings.System.putString(ctRes,
        // android.provider.Settings.System.WIFI_STATIC_GATEWAY, "192.168.0.1");
        // android.provider.Settings.System.putString(ctRes,
        // android.provider.Settings.System.WIFI_STATIC_DNS1,"192.168.0.1");
        // android.provider.Settings.System.putString(ctRes,
        // android.provider.Settings.System.WIFI_STATIC_DNS2,"61.134.1.9");
        return true;
    } else { // 如果是android3.x版本及以上的话
        try {
            setIpAssignment("STATIC", wifiConfig);
            setIpAddress(InetAddress.getByName("192.168.1.199"), 24, wifiConfig);
            setGateway(InetAddress.getByName("192.168.1.1"), wifiConfig);
            //setDNS(InetAddress.getByName("114.114.114.114"), wifiConfig);
            //setDNS(InetAddress.getByName("8.8.8.8"), wifiConfig);
            setDNS_a33(InetAddress.getByName("214.114.114.114"), InetAddress.getByName("28.8.8.8"), wifiConfig);
            wifiManager.updateNetwork(wifiConfig);
            // apply the setting
            Log.i(TAG, "wifiConfig = " + wifiConfig );
            System.out.println("静态ip设置成功!");
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("静态ip设置失败!");
            return false;
        }
    }
}

private static void setIpAssignment(String assign, WifiConfiguration wifiConf)
        throws SecurityException, IllegalArgumentException,
        NoSuchFieldException, IllegalAccessException {
    setEnumField(wifiConf, assign, "ipAssignment");
}


private static void setIpAddress(InetAddress addr, int prefixLength,
        WifiConfiguration wifiConf) throws SecurityException,
        IllegalArgumentException, NoSuchFieldException,
        IllegalAccessException, NoSuchMethodException,
        ClassNotFoundException, InstantiationException, InvocationTargetException {
    Object linkProperties = getField(wifiConf, "linkProperties");
    if (linkProperties == null)
        return;
    Class<?> laClass = Class.forName("android.net.LinkAddress");
    Constructor<?> laConstructor = laClass.getConstructor(new Class[] {
            InetAddress.class, int.class });
    Object linkAddress = laConstructor.newInstance(addr, prefixLength);


    ArrayList<Object> mLinkAddresses = (ArrayList<Object>) getDeclaredField(
            linkProperties, "mLinkAddresses");
    mLinkAddresses.clear();
    mLinkAddresses.add(linkAddress);
}

private static Object getField(Object obj, String name)
        throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException {
    Field f = obj.getClass().getField(name);
    Object out = f.get(obj);
    return out;
}
private static Object getDeclaredField(Object obj, String name)
        throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException {
    Field f = obj.getClass().getDeclaredField(name);
    f.setAccessible(true);
    Object out = f.get(obj);
    return out;
}
@SuppressWarnings({"unchecked", "rawtypes" })
private static void setEnumField(Object obj, String value, String name)
        throws SecurityException, NoSuchFieldException,IllegalArgumentException, IllegalAccessException {
    Field f = obj.getClass().getField(name);
    f.set(obj, Enum.valueOf((Class<Enum>) f.getType(), value));
}

private static void setGateway(InetAddress gateway,WifiConfiguration wifiConf)
        throws SecurityException, IllegalArgumentException, NoSuchFieldException,
        IllegalAccessException, ClassNotFoundException, NoSuchMethodException, InstantiationException, InvocationTargetException {
    Object linkProperties = getField(wifiConf, "linkProperties");
    if (linkProperties == null) {
        return;
    }


    if (android.os.Build.VERSION.SDK_INT >= 14) {
        //android4.x版本
        Class<?> routeInfoClass = Class.forName("android.net.RouteInfo");
        Constructor<?> routeInfoConstructor = routeInfoClass.getConstructor(new Class[]{InetAddress.class });
        Object routeInfo = routeInfoConstructor.newInstance(gateway);
        ArrayList<Object> mRoutes = (ArrayList<Object>)getDeclaredField(linkProperties, "mRoutes");
        mRoutes.clear();
        mRoutes.add(routeInfo);
    } else {
        //android3.x版本
        ArrayList<InetAddress> mGateways = (ArrayList<InetAddress>) getDeclaredField(linkProperties, "mGateways");
        mGateways.clear();
        mGateways.add(gateway);
    }
 }

private static void setDNS(InetAddress dns, WifiConfiguration wifiConf)
        throws SecurityException, IllegalArgumentException,
        NoSuchFieldException, IllegalAccessException {
    Object linkProperties = getField(wifiConf, "linkProperties");
    if (linkProperties == null) {
        return;
    }
    Log.i(TAG, "linkProperties = " + linkProperties );
    ArrayList<InetAddress> mDnses = (ArrayList<InetAddress>)getDeclaredField(linkProperties, "mDnses");
    //mDnses.clear(); // 清除原有DNS设置(如果只想增加,不想清除,词句可省略)
    mDnses.add(dns);
    // 增加新的DNS
}

private static void setDNS_a33(InetAddress dns1,InetAddress dns2, WifiConfiguration wifiConf)
        throws SecurityException, IllegalArgumentException,
        NoSuchFieldException, IllegalAccessException {
    Object linkProperties = getField(wifiConf, "linkProperties");
    if (linkProperties == null) {
        return;
    }
    Log.i(TAG, "linkProperties = " + linkProperties);
    ArrayList<InetAddress> mDnses = (ArrayList<InetAddress>)getDeclaredField(linkProperties, "mDnses");
    mDnses.clear(); // 清除原有DNS设置(如果只想增加,不想清除,词句可省略)

    mDnses.add(dns2);
    mDnses.add(dns1);
    // 增加新的DNS
}










  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值