WifiApAdmin.java
package home.mft; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.util.Log; public class WifiApAdmin { public static final String TAG = "WifiApAdmin"; public static void closeWifiAp(Context context) { WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); closeWifiAp(wifiManager); } private WifiManager mWifiManager = null; private Context mContext = null; public WifiApAdmin(Context context) { mContext = context; mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); closeWifiAp(mWifiManager); } private String mSSID = ""; private String mPasswd = ""; public void startWifiAp(String ssid, String passwd) { mSSID = ssid; mPasswd = passwd; if (mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } stratWifiAp(); MyTimerCheck timerCheck = new MyTimerCheck() { @Override public void doTimerCheckWork() { // TODO Auto-generated method stub if (isWifiApEnabled(mWifiManager)) { Log.v(TAG, "Wifi enabled success!"); this.exit(); } else { Log.v(TAG, "Wifi enabled failed!"); } } @Override public void doTimeOutWork() { // TODO Auto-generated method stub this.exit(); } }; timerCheck.start(15, 1000); } public void stratWifiAp() { Method method1 = null; try { method1 = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); WifiConfiguration netConfig = new WifiConfiguration(); netConfig.SSID = mSSID; netConfig.preSharedKey = mPasswd; netConfig.allowedAuthAlgorithms .set(WifiConfiguration.AuthAlgorithm.OPEN); netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); netConfig.allowedKeyManagement .set(WifiConfiguration.KeyMgmt.WPA_PSK); netConfig.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.CCMP); netConfig.allowedPairwiseCiphers .set(WifiConfiguration.PairwiseCipher.TKIP); netConfig.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.CCMP); netConfig.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.TKIP); method1.invoke(mWifiManager, netConfig, true); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void closeWifiAp(WifiManager wifiManager) { if (isWifiApEnabled(wifiManager)) { try { Method method = wifiManager.getClass().getMethod("getWifiApConfiguration"); method.setAccessible(true); WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager); Method method2 = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); method2.invoke(wifiManager, config, false); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private static boolean isWifiApEnabled(WifiManager wifiManager) { try { Method method = wifiManager.getClass().getMethod("isWifiApEnabled"); method.setAccessible(true); return (Boolean) method.invoke(wifiManager); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return false; } }
MyTimerCheck.java
package home.mft; public abstract class MyTimerCheck { private int mCount = 0; private int mTimeOutCount = 1; private int mSleepTime = 1000; // 1s private boolean mExitFlag = false; private Thread mThread = null; /** * Do not process UI work in this. */ public abstract void doTimerCheckWork(); public abstract void doTimeOutWork(); public MyTimerCheck() { mThread = new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub while (!mExitFlag) { mCount++; if (mCount < mTimeOutCount) { doTimerCheckWork(); try { mThread.sleep(mSleepTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); exit(); } } else { doTimeOutWork(); } } } }); } /** * start * @param times How many times will check? * @param sleepTime ms, Every check sleep time. */ public void start(int timeOutCount, int sleepTime) { mTimeOutCount = timeOutCount; mSleepTime = sleepTime; mThread.start(); } public void exit() { mExitFlag = true; } }
然后是调用 HomeIndex.java
package home.mft; import hotspot.mft.R; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.app.Activity; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import android.os.Bundle; import android.view.View; import android.widget.Button; public class HomeIndex extends Activity { private Button button1; /** Called when the activity is first created. */ private Context mContext = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = HomeIndex.this; setContentView(R.layout.main); button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub WifiApAdmin wifiAp = new WifiApAdmin(mContext); wifiAp.startWifiAp("mftAP", "123456789"); //\ } }); //\\ } }
manifest 权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" ></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" ></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" ></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" ></uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCES_MOCK_LOCATION"></uses-permission>