android WIFI 设置代理代码 4.4.3——5.0

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android WIFI 设置代理代码 4.4.3——5.0相关的知识,希望对你有一定的参考价值。

记录下android中设置代理代码 或许有朋友能用的上

适用于4.4.3 在5.0上android.net.ProxyProperties 找不到 估计API被谷歌拿掉了 4.4.4还没试估计API还在

private static String NOTPROXY = ""; //不走代理名单

     private  static   List<String> list;
    //type为1设置wifi设置   为0是清除代理
    public static void setWifi(Context context, final String ip, final int port, final int type) throws SecurityException, IllegalArgumentException,
            NoSuchFieldException, IllegalAccessException,
            NoSuchMethodException, ClassNotFoundException,
            InstantiationException, InvocationTargetException {
        final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        final String ssid = wifiManager.getConnectionInfo().getSSID();
        List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
       changeNotProxy();
        for (WifiConfiguration config : configuredNetworks) {
            Log.d("txy", "current SSID is" + config.SSID);
            if (config.SSID.toString().contains(Common.MYSSID)) {  //需要给哪个无线设置代理
                Class proxyPropertiesClass = Class
                        .forName("android.net.ProxyProperties");
                Constructor c = proxyPropertiesClass.getConstructor(String.class,
                        Integer.TYPE, String.class);
                c.setAccessible(true);
                //wifiIP 为代理的IP地址  如:192.168.0.111   wifiPort为代理端口 如888

                setProxy(config, (type == 0 ? null : c.newInstance(ip, port, NOTPROXY)), type);
                wifiManager.updateNetwork(config);
                break;
            } else {
//                wifiManager.removeNetwork(config.networkId);
            }
        }
        wifiManager.disconnect();
        wifiManager.reconnect();
    }
    public static void setObjField(Object obj, Object value, String name)
            throws SecurityException, NoSuchFieldException,
            IllegalArgumentException, IllegalAccessException {
        Field f = obj.getClass().getDeclaredField(name);
        f.setAccessible(true);
        f.set(obj, value);
    }

    //type为1设置wifi设置   为0是清除代理
    public static WifiConfiguration setProxy(WifiConfiguration wifiConf, Object properties, int type)
            throws SecurityException, IllegalArgumentException,
            NoSuchFieldException, IllegalAccessException,
            NoSuchMethodException, ClassNotFoundException,
            InstantiationException, InvocationTargetException {
        if (type == 0) setEnumField(wifiConf, "NONE", "proxySettings");
        else setEnumField(wifiConf, "STATIC", "proxySettings");
        Object linkProperties = getField(wifiConf, "linkProperties");
        setObjField(linkProperties, properties, "mHttpProxy");
        setObjField(wifiConf, linkProperties, "linkProperties");
        return wifiConf;
    }

    public 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));
    }

    public 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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

5.0

  private  static   List<String> list;//不走代理名单 

 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public static void set_proxy(Application context, String ip, String port, int type) throws Throwable
    {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo wi = wifiManager.getConnectionInfo();

        List<WifiConfiguration> configuredNetworks = wifiManager.getConfiguredNetworks();
        changeNotProxy();
        for(WifiConfiguration config : configuredNetworks)
        {
            //需要给哪个无线设置代理
            if(config.SSID.equals(wi.getSSID()))
            {

                Class proxySettings = Class.forName("android.net.IpConfiguration$ProxySettings");

                Class[] setProxyParams = new Class[2];
                setProxyParams[0] = proxySettings;
                setProxyParams[1] = ProxyInfo.class;

                Method setProxy = config.getClass().getDeclaredMethod("setProxy", setProxyParams);
                setProxy.setAccessible(true);


                if(type == 0)
                {
                    Object[] methodParams = new Object[2];
                    methodParams[0] = Enum.valueOf(proxySettings, "NONE");
                    methodParams[1] = null;

                    setProxy.invoke(config, methodParams);
                }
                else
                {
                    ProxyInfo desiredProxy = ProxyInfo.buildDirectProxy(ip, Integer.parseInt(port),list);

                    Object[] methodParams = new Object[2];
                    methodParams[0] = Enum.valueOf(proxySettings, "STATIC");
                    methodParams[1] = desiredProxy;

                    setProxy.invoke(config, methodParams);
                }


                //save the settings
                wifiManager.updateNetwork(config);
                wifiManager.disconnect();
                wifiManager.reconnect();


                break;
            }
        }
    }

以上是关于android WIFI 设置代理代码 4.4.3——5.0的主要内容,如果未能解决你的问题,请参考以下文章

Android10 系统应用wifi连接和静态ip代理设置

android手机使用Fiddler

求助,Fiddler代理后网络问题.必须有果

图解Fiddler如何抓取Android数据包

如何在 Android 中更改代理设置(尤其是在 Chrome 中)[关闭]

wifi代理是啥意思