使用连接的wifi热点的Android代码修改代理设置

时间:2016-05-19 06:00:43

标签: java android proxy

我已经从我的windows7机器创建了一个热点,并尝试编写代码将我的Android手机连接到该热点。 我已经能够连接手机了。 此外,我正在尝试使用代码修改连接热点的IP和端口等代理设置。 手机正在连接热点,但代码无法修改代理设置。

我写的代码如下:

Main_activity.java

  

我正在连接在vb.net中创建的wifi热点,然后将手机连接到该热点

`包com.example.connect_avek;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.ProxyInfo;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.Toast;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

import static android.widget.Toast.LENGTH_LONG;

public class MainActivity extends Activity {


    Button startbtn,stopbtn;
    RelativeLayout background;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startbtn = (Button)findViewById(R.id.startbtn);
        stopbtn = (Button)findViewById(R.id.stopbtn);


        startbtn.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onClick(View v) {
                //start connection code
             WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
                wifi.setWifiEnabled(true);
                WifiConfiguration wc = new WifiConfiguration();
                wc.SSID = "\"" + "shashank" + "\"";  // Please note the quotes. String should contain SSID in quotes

                wc.preSharedKey = "\"" + "mummy@123" + "\"";

                wc.status = WifiConfiguration.Status.ENABLED;
                wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
                wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
                wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
                wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
                wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);

                Log.d("connecting", wc.SSID + " " + wc.preSharedKey);

                wifi.addNetwork(wc);

                Log.d("after connecting", wc.SSID + " " + wc.preSharedKey);


                List<WifiConfiguration> list = wifi.getConfiguredNetworks();
                for (WifiConfiguration i : list) {
                    if (i.SSID != null && i.SSID.equals("\"" + "shashank" + "\"")) {
                        wifi.disconnect();
                        wifi.enableNetwork(i.networkId, true);
                        wifi.reconnect();
                        Log.d("re connecting", i.SSID + " " + wc.preSharedKey);
                        try {
                            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("192.168.137.1", 7777);
                            //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(wc, params_SetHttpProxy);

                            //pass the enum to setProxySettings
                            Object[] params_setProxySettings = new Object[1];
                            params_setProxySettings[0] = Enum.valueOf((Class<Enum>) proxySettingsClass, "STATIC");
                            setProxySettings.invoke(wc, params_setProxySettings);

                            //save the settings
                            wifi.updateNetwork(wc);
                            wifi.disconnect();
                            wifi.reconnect();
                        } catch (Exception e) {
                            Log.v("wifiProxy", e.toString());
                        }

                    }
                    break;

                }
            }


        });
        stopbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //stop connection code
                WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                wifi.setWifiEnabled(false);
            }
        });

            }
} `

-----------------------------------------------------------------------------

**manifest.xml**
  

我已添加了互联网状态和活动的wifi权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.connect_avek" >

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

----------------------------------------------------------------------------

0 个答案:

没有答案