开启android手机的wifi热点 .

 

因为无线wifi不能和wufi热点同时打开,所以开启wifi热点的时候要监测是否打开了wifi,打开了就要关闭


[java] view plain copy print ?
  1. wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);  

[java] view plain copy print ?
  1. private void startWifiAp() {  
  2.     handler = new Handler();  
  3.     if (wifiManager.isWifiEnabled()) {  
  4.         closeWifiHandler = new Handler() {  
  5.             @Override  
  6.             public void handleMessage(Message msg) {  
  7.                 startWifiApTh();  
  8.                 super.handleMessage(msg);  
  9.             }  
  10.         };  
  11.         cwt = new CloseWifiThread();  
  12.         Thread thread = new Thread(cwt);  
  13.         thread.start();  
  14.   
  15.     }else{  
  16.         startWifiApTh();  
  17.     }  
  18.   
  19.   
  20. }  
  21.   
  22. class CloseWifiThread implements Runnable {  
  23.     public CloseWifiThread() {  
  24.         super();  
  25.     }  
  26.   
  27.     @Override  
  28.     public void run() {  
  29.         int state = wifiManager.getWifiState();  
  30.         if (state == WifiManager.WIFI_STATE_ENABLED) {  
  31.             wifiManager.setWifiEnabled(false);  
  32.             closeWifiHandler.postDelayed(cwt, 1000);  
  33.         } else if (state == WifiManager.WIFI_STATE_DISABLING) {  
  34.             closeWifiHandler.postDelayed(cwt, 1000);  
  35.         }else if(state == WifiManager.WIFI_STATE_DISABLED){  
  36.             closeWifiHandler.sendEmptyMessage(0);  
  37.         }  
  38.   
  39.     }  
  40. }  
  41.   
  42. private void startWifiApTh(){  
  43.     swat = new StratWifiApThread();  
  44.     Thread thread = new Thread(swat);  
  45.     thread.start();  
  46. }  
  47. class StratWifiApThread implements Runnable {  
  48.     public StratWifiApThread() {  
  49.         super();  
  50.     }  
  51.   
  52.     @Override  
  53.     public void run() {  
  54.         // TODO Auto-generated method stub   
  55.         WifiUtil mWifiUtil = new WifiUtil();  
  56.         int state = mWifiUtil.getWifiApState(wifiManager);  
  57.         if (state == WifiUtil.WIFI_AP_STATE_DISABLED) {  
  58.             mWifiUtil.stratWifiAp(wifiManager);  
  59.             handler.postDelayed(swat, 1000);  
  60.         } else if (state == WifiUtil.WIFI_AP_STATE_ENABLING  
  61.                 || state == WifiUtil.WIFI_AP_STATE_FAILED) {  
  62.             handler.postDelayed(swat, 1000);  
  63.         }else if (state == WifiUtil.WIFI_AP_STATE_ENABLED){  
  64.             Toast.makeText(ActivityForAndroid.this"已开启wlan热点"2000).show();  
  65.         }  
  66.     }  
  67.   
  68. }  

[java] view plain copy print ?
  1. public class WifiUtil {  
  2.   
  3.     public static final int WIFI_AP_STATE_DISABLING = 0;  
  4.     public static final int WIFI_AP_STATE_DISABLED = 1;  
  5.     public static final int WIFI_AP_STATE_ENABLING = 2;  
  6.     public static final int WIFI_AP_STATE_ENABLED = 3;  
  7.     public static final int WIFI_AP_STATE_FAILED = 4;  
  8.   
  9.     public void stratWifiAp(WifiManager wifiManager) {  
  10.         // WifiManager wifi = (WifiManager)   
  11.         // getSystemService(Context.WIFI_SERVICE);   
  12.         // wifiManager.setWifiEnabled(false);   
  13.         Method method1 = null;  
  14.         try {  
  15.             method1 = wifiManager.getClass().getMethod("setWifiApEnabled",  
  16.                     WifiConfiguration.classboolean.class);  
  17.             WifiConfiguration netConfig = new WifiConfiguration();  
  18.             //wifi热点名字   
  19.             netConfig.SSID = "\" T  E S T \"";  
  20.             netConfig.allowedAuthAlgorithms  
  21.                     .set(WifiConfiguration.AuthAlgorithm.OPEN);  
  22.             netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);  
  23.             netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);  
  24.             netConfig.allowedKeyManagement  
  25.                     .set(WifiConfiguration.KeyMgmt.WPA_PSK);  
  26.             netConfig.allowedPairwiseCiphers  
  27.                     .set(WifiConfiguration.PairwiseCipher.CCMP);  
  28.             netConfig.allowedPairwiseCiphers  
  29.                     .set(WifiConfiguration.PairwiseCipher.TKIP);  
  30.             netConfig.allowedGroupCiphers  
  31.                     .set(WifiConfiguration.GroupCipher.CCMP);  
  32.             netConfig.allowedGroupCiphers  
  33.                     .set(WifiConfiguration.GroupCipher.TKIP);  
  34.             //密码   
  35.             netConfig.preSharedKey = "\"11111111\"";  
  36.   
  37.             method1.invoke(wifiManager, netConfig, true);  
  38.             // Method method2 =   
  39.             // wifiManager.getClass().getMethod("getWifiApState");   
  40.             // int state = (Integer) method2.invoke(wifiManager);   
  41.             // Log.i("wifi state" + state);   
  42.         } catch (IllegalArgumentException e) {  
  43.             // TODO Auto-generated catch block   
  44.             e.printStackTrace();  
  45.         } catch (IllegalAccessException e) {  
  46.             // TODO Auto-generated catch block   
  47.             e.printStackTrace();  
  48.         } catch (InvocationTargetException e) {  
  49.             // TODO Auto-generated catch block   
  50.             e.printStackTrace();  
  51.         } catch (SecurityException e) {  
  52.             // TODO Auto-generated catch block   
  53.             e.printStackTrace();  
  54.         } catch (NoSuchMethodException e) {  
  55.             // TODO Auto-generated catch block   
  56.             e.printStackTrace();  
  57.         }  
  58.   
  59.     }  
  60.   
  61.     public int getWifiApState(WifiManager wifiManager) {  
  62.         try {  
  63.             Method method = wifiManager.getClass().getMethod("getWifiApState");  
  64.             int i = (Integer) method.invoke(wifiManager);  
  65.             Log.i("wifi state:  " + i);  
  66.             return i;  
  67.         } catch (Exception e) {  
  68.             Log.i("Cannot get WiFi AP state" + e);  
  69.             return WIFI_AP_STATE_FAILED;  
  70.         }  
  71.     }  
  72. }  


上面的代码用到handler每隔1秒post线程来监测是否关闭了wifi 和是否打开了wifi热点..不知道还有没有其他更好的方法..

 

wifiutil类的打开wifi热点的代码用到java的反射类 还在学习..


 

你可能感兴趣的:(java,thread,android,service,Integer,手机)