| packagecom.zhf.wifidemo.wifi.utils;
 importjava.lang.reflect.Field;
 importjava.lang.reflect.Method;
 importjava.util.Iterator;
 importjava.util.List;
 importandroid.content.Context;
 importandroid.net.wifi.ScanResult;
 importandroid.net.wifi.WifiConfiguration;
 importandroid.net.wifi.WifiInfo;
 importandroid.net.wifi.WifiManager;
 /**
  * WIFI管理類
  * @author ZHF
  *
  */
 publicclassWifiAdmin {
     privatestaticWifiAdmin wifiAdmin = null;
                                                                                                                                                           
     privateList<WifiConfiguration> mWifiConfiguration; //無(wú)線網(wǎng)絡(luò)配置信息類集合(網(wǎng)絡(luò)連接列表)
     privateList<ScanResult> mWifiList; //檢測(cè)到接入點(diǎn)信息類 集合
                                                                                                                                                           
     //描述任何Wifi連接狀態(tài)
     privateWifiInfo mWifiInfo;
                                                                                                                                                           
     WifiManager.WifiLock mWifilock; //能夠阻止wifi進(jìn)入睡眠狀態(tài),使wifi一直處于活躍狀態(tài)
     publicWifiManager mWifiManager;
                                                                                                                                                           
     /**
      * 獲取該類的實(shí)例(懶漢)
      * @param context
      * @return
      */
     publicstaticWifiAdmin getInstance(Context context) {
         if(wifiAdmin == null) {
             wifiAdmin = newWifiAdmin(context);
             returnwifiAdmin;
         }
         returnnull;
     }
     privateWifiAdmin(Context context) {
         //獲取系統(tǒng)Wifi服務(wù)   WIFI_SERVICE
         this.mWifiManager = (WifiManager) context.getSystemService("wifi");
         //獲取連接信息
         this.mWifiInfo = this.mWifiManager.getConnectionInfo();
     }
                                                                                                                                                           
     /**
      * 是否存在網(wǎng)絡(luò)信息
      * @param str  熱點(diǎn)名稱
      * @return
      */
     privateWifiConfiguration isExsits(String str) {
         Iterator localIterator = this.mWifiManager.getConfiguredNetworks().iterator();
         WifiConfiguration localWifiConfiguration;
         do{
             if(!localIterator.hasNext()) returnnull;
             localWifiConfiguration = (WifiConfiguration) localIterator.next();
         }while(!localWifiConfiguration.SSID.equals("\""+ str + "\""));
         returnlocalWifiConfiguration;
     }
                                                                                                                                                           
     /**鎖定WifiLock,當(dāng)下載大文件時(shí)需要鎖定 **/
     publicvoidAcquireWifiLock() {
         this.mWifilock.acquire();
     }
     /**創(chuàng)建一個(gè)WifiLock**/
     publicvoidCreateWifiLock() {
         this.mWifilock = this.mWifiManager.createWifiLock("Test");
     }
     /**解鎖WifiLock**/
     publicvoidReleaseWifilock() {
         if(mWifilock.isHeld()) { //判斷時(shí)候鎖定
             mWifilock.acquire();
         }
     }
                                                                                                                                                           
                                                                                                                                                           
     /**打開(kāi)Wifi**/
     publicvoidOpenWifi() {
         if(!this.mWifiManager.isWifiEnabled()){ //當(dāng)前wifi不可用
             this.mWifiManager.setWifiEnabled(true);
         }
     }
     /**關(guān)閉Wifi**/
     publicvoidcloseWifi() {
         if(mWifiManager.isWifiEnabled()) {
             mWifiManager.setWifiEnabled(false);
         }
     }
     /**端口指定id的wifi**/
     publicvoiddisconnectWifi(intparamInt) {
         this.mWifiManager.disableNetwork(paramInt);
     }
                                                                                                                                                           
     /**添加指定網(wǎng)絡(luò)**/
     publicvoidaddNetwork(WifiConfiguration paramWifiConfiguration) {
         inti = mWifiManager.addNetwork(paramWifiConfiguration);
         mWifiManager.enableNetwork(i, true);
     }
                                                                                                                                                           
     /**
      * 連接指定配置好的網(wǎng)絡(luò)
      * @param index 配置好網(wǎng)絡(luò)的ID
      */
     publicvoidconnectConfiguration(intindex) { 
         // 索引大于配置好的網(wǎng)絡(luò)索引返回  
         if(index > mWifiConfiguration.size()) { 
             return; 
         } 
         //連接配置好的指定ID的網(wǎng)絡(luò)  
         mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true); 
     }
                                                                                                                                                           
     /**
      * 根據(jù)wifi信息創(chuàng)建或關(guān)閉一個(gè)熱點(diǎn)
      * @param paramWifiConfiguration
      * @param paramBoolean 關(guān)閉標(biāo)志
      */
     publicvoidcreateWifiAP(WifiConfiguration paramWifiConfiguration,booleanparamBoolean) {
         try{
             Class localClass = this.mWifiManager.getClass();
             Class[] arrayOfClass = newClass[2];
             arrayOfClass[0] = WifiConfiguration.class;
             arrayOfClass[1] = Boolean.TYPE;
             Method localMethod = localClass.getMethod("setWifiApEnabled",arrayOfClass);
             WifiManager localWifiManager = this.mWifiManager;
             Object[] arrayOfObject = newObject[2];
             arrayOfObject[0] = paramWifiConfiguration;
             arrayOfObject[1] = Boolean.valueOf(paramBoolean);
             localMethod.invoke(localWifiManager, arrayOfObject);
             return;
         } catch(Exception e) {
             e.printStackTrace();
         }
     }
     /**
      * 創(chuàng)建一個(gè)wifi信息
      * @param ssid 名稱
      * @param passawrd 密碼
      * @param paramInt 有3個(gè)參數(shù),1是無(wú)密碼,2是簡(jiǎn)單密碼,3是wap加密
      * @param type 是"ap"還是"wifi"
      * @return
      */
     publicWifiConfiguration createWifiInfo(String ssid, String passawrd,intparamInt, String type) {
         //配置網(wǎng)絡(luò)信息類
         WifiConfiguration localWifiConfiguration1 = newWifiConfiguration();
         //設(shè)置配置網(wǎng)絡(luò)屬性
         localWifiConfiguration1.allowedAuthAlgorithms.clear();
         localWifiConfiguration1.allowedGroupCiphers.clear();
         localWifiConfiguration1.allowedKeyManagement.clear();
         localWifiConfiguration1.allowedPairwiseCiphers.clear();
         localWifiConfiguration1.allowedProtocols.clear();
                                                                                                                                                               
         if(type.equals("wt")) { //wifi連接
             localWifiConfiguration1.SSID = ("\""+ ssid + "\"");
             WifiConfiguration localWifiConfiguration2 = isExsits(ssid);
             if(localWifiConfiguration2 != null) {
                 mWifiManager.removeNetwork(localWifiConfiguration2.networkId); //從列表中刪除指定的網(wǎng)絡(luò)配置網(wǎng)絡(luò)
             }
             if(paramInt == 1) { //沒(méi)有密碼
                 localWifiConfiguration1.wepKeys[0] = "";
                 localWifiConfiguration1.allowedKeyManagement.set(0);
                 localWifiConfiguration1.wepTxKeyIndex = 0;
             } elseif(paramInt == 2) { //簡(jiǎn)單密碼
                 localWifiConfiguration1.hiddenSSID = true;
                 localWifiConfiguration1.wepKeys[0] = ("\""+ passawrd + "\"");
             } else{ //wap加密
                 localWifiConfiguration1.preSharedKey = ("\""+ passawrd + "\"");
                 localWifiConfiguration1.hiddenSSID = true;
                 localWifiConfiguration1.allowedAuthAlgorithms.set(0);
                 localWifiConfiguration1.allowedGroupCiphers.set(2);
                 localWifiConfiguration1.allowedKeyManagement.set(1);
                 localWifiConfiguration1.allowedPairwiseCiphers.set(1);
                 localWifiConfiguration1.allowedGroupCiphers.set(3);
                 localWifiConfiguration1.allowedPairwiseCiphers.set(2);
             }
         }else{//"ap" wifi熱點(diǎn)
             localWifiConfiguration1.SSID = ssid;
             localWifiConfiguration1.allowedAuthAlgorithms.set(1);
             localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
             localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
             localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
             localWifiConfiguration1.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
             localWifiConfiguration1.allowedKeyManagement.set(0);
             localWifiConfiguration1.wepTxKeyIndex = 0;
             if(paramInt == 1) {  //沒(méi)有密碼
                 localWifiConfiguration1.wepKeys[0] = "";
                 localWifiConfiguration1.allowedKeyManagement.set(0);
                 localWifiConfiguration1.wepTxKeyIndex = 0;
             } elseif(paramInt == 2) { //簡(jiǎn)單密碼
                 localWifiConfiguration1.hiddenSSID = true;//網(wǎng)絡(luò)上不廣播ssid
                 localWifiConfiguration1.wepKeys[0] = passawrd;
             } elseif(paramInt == 3) {//wap加密
                 localWifiConfiguration1.preSharedKey = passawrd;
                 localWifiConfiguration1.allowedAuthAlgorithms.set(0);
                 localWifiConfiguration1.allowedProtocols.set(1);
                 localWifiConfiguration1.allowedProtocols.set(0);
                 localWifiConfiguration1.allowedKeyManagement.set(1);
                 localWifiConfiguration1.allowedPairwiseCiphers.set(2);
                 localWifiConfiguration1.allowedPairwiseCiphers.set(1);
             }
         }
         returnlocalWifiConfiguration1;
     }
                                                                                                                                                           
     /**獲取熱點(diǎn)名**/
     publicString getApSSID() {
         try{
             Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", newClass[0]);
             if(localMethod == null) returnnull;
             Object localObject1 = localMethod.invoke(this.mWifiManager,newObject[0]);
             if(localObject1 == null) returnnull;
             WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1;
             if(localWifiConfiguration.SSID != null) returnlocalWifiConfiguration.SSID;
             Field localField1 = WifiConfiguration.class.getDeclaredField("mWifiApProfile");
             if(localField1 == null) returnnull;
             localField1.setAccessible(true);
             Object localObject2 = localField1.get(localWifiConfiguration);
             localField1.setAccessible(false);
             if(localObject2 == null)  returnnull;
             Field localField2 = localObject2.getClass().getDeclaredField("SSID");
             localField2.setAccessible(true);
             Object localObject3 = localField2.get(localObject2);
             if(localObject3 == null) returnnull;
             localField2.setAccessible(false);
             String str = (String) localObject3;
             returnstr;
         } catch(Exception localException) {
         }
         returnnull;
     }
                                                                                                                                                           
     /**獲取wifi名**/
     publicString getBSSID() {
         if(this.mWifiInfo == null)
             return"NULL";
         returnthis.mWifiInfo.getBSSID();
     }
                                                                                                                                                         
    /**得到配置好的網(wǎng)絡(luò) **/
     publicList<WifiConfiguration> getConfiguration() {
         returnthis.mWifiConfiguration;
     }
                                                                                                                                                           
     /**獲取ip地址**/
     publicintgetIPAddress() {
         return(mWifiInfo == null) ? 0: mWifiInfo.getIpAddress();
     }
     /**獲取物理地址(Mac)**/
     publicString getMacAddress() {
          return(mWifiInfo == null) ? "NULL": mWifiInfo.getMacAddress();
     }   
                                                                                                                                                             
     /**獲取網(wǎng)絡(luò)id**/
     publicintgetNetworkId() {
          return(mWifiInfo == null) ? 0: mWifiInfo.getNetworkId();
     }
     /**獲取熱點(diǎn)創(chuàng)建狀態(tài)**/
     publicintgetWifiApState() {
         try{
             inti = ((Integer) this.mWifiManager.getClass()
                     .getMethod("getWifiApState", newClass[0])
                     .invoke(this.mWifiManager, newObject[0])).intValue();
             returni;
         } catch(Exception localException) {
         }
         return4;   //未知wifi網(wǎng)卡狀態(tài)
     }
     /**獲取wifi連接信息**/
     publicWifiInfo getWifiInfo() {
         returnthis.mWifiManager.getConnectionInfo();
     }
     /** 得到網(wǎng)絡(luò)列表**/
     publicList<ScanResult> getWifiList() {
         returnthis.mWifiList;
     }
                                                                                                                                                         
     /**查看掃描結(jié)果**/
     publicStringBuilder lookUpScan() {
         StringBuilder localStringBuilder = newStringBuilder();
         for(inti = 0; i < mWifiList.size(); i++)
         {
             localStringBuilder.append("Index_"+newInteger(i + 1).toString() + ":");
             //將ScanResult信息轉(zhuǎn)換成一個(gè)字符串包
             //其中把包括:BSSID、SSID、capabilities、frequency、level
             localStringBuilder.append((mWifiList.get(i)).toString());
             localStringBuilder.append("\n");
         }
         returnlocalStringBuilder;
     }
                                                                                                                                                             
     /** 設(shè)置wifi搜索結(jié)果 **/
     publicvoidsetWifiList() {
         this.mWifiList = this.mWifiManager.getScanResults();
     }
     /**開(kāi)始搜索wifi**/
     publicvoidstartScan() {
         this.mWifiManager.startScan();
     }
     /**得到接入點(diǎn)的BSSID**/
     publicString GetBSSID() {
         return(mWifiInfo == null) ? "NULL": mWifiInfo.getBSSID();
     }
 }
 |