How can I set ProxySettings and ProxyProperties on Android Wi-Fi connection using Java?

前端 未结 3 1471
不知归路
不知归路 2020-12-01 03:09

How can I set ProxySettings and ProxyProperties on an Android Wi-Fi connection using Java (programatically)?

As ipAssignment, linkProperties, ProxySettings and Proxy

3条回答
  •  盖世英雄少女心
    2020-12-01 03:39

    Here is some sample code to handle the same thing in Android 5.0 following the same format as Carl's answer above.

    public void setWifiProxySettings5()
    {
        //get the current wifi configuration
        WifiManager manager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
        WifiConfiguration config = GetCurrentWifiConfiguration(manager);
        if(null == config)
            return;     
    
        try
        {       
            //linkProperties is no longer in WifiConfiguration          
            Class proxyInfoClass = Class.forName("android.net.ProxyInfo");
            Class[] setHttpProxyParams = new Class[1];
            setHttpProxyParams[0] = proxyInfoClass;         
            Class wifiConfigClass = Class.forName("android.net.wifi.WifiConfiguration");
            Method setHttpProxy = wifiConfigClass.getDeclaredMethod("setHttpProxy", setHttpProxyParams);
            setHttpProxy.setAccessible(true);
    
            //Method 1 to get the ENUM ProxySettings in IpConfiguration
            Class ipConfigClass = Class.forName("android.net.IpConfiguration");
            Field f = ipConfigClass.getField("proxySettings");
            Class proxySettingsClass = f.getType();        
    
            //Method 2 to get the ENUM ProxySettings in IpConfiguration
            //Note the $ between the class and ENUM
            //Class proxySettingsClass = Class.forName("android.net.IpConfiguration$ProxySettings");
    
            Class[] setProxySettingsParams = new Class[1];
            setProxySettingsParams[0] = proxySettingsClass;
            Method setProxySettings = wifiConfigClass.getDeclaredMethod("setProxySettings", setProxySettingsParams);
            setProxySettings.setAccessible(true);
    
    
            ProxyInfo pi = ProxyInfo.buildDirectProxy("127.0.0.1", 8118);
            //Android 5 supports a PAC file
            //ENUM value is "PAC"
            //ProxyInfo pacInfo = ProxyInfo.buildPacProxy(Uri.parse("http://localhost/pac"));
    
            //pass the new object to setHttpProxy
            Object[] params_SetHttpProxy = new Object[1];
            params_SetHttpProxy[0] = pi;
            setHttpProxy.invoke(config, params_SetHttpProxy);
    
            //pass the enum to setProxySettings
            Object[] params_setProxySettings = new Object[1];
            params_setProxySettings[0] = Enum.valueOf((Class) proxySettingsClass, "STATIC");
            setProxySettings.invoke(config, params_setProxySettings);
    
            //save the settings
            manager.updateNetwork(config);
            manager.disconnect();
            manager.reconnect();
        }   
        catch(Exception e)
        {
            Log.v("wifiProxy", e.toString());
        }
    }
    

提交回复
热议问题