1. 程式人生 > >WiFiAdmin(WiFi管理工具類)

WiFiAdmin(WiFi管理工具類)

import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;

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

/**
 * WIFI管理類
 * @author
ZHF * */
public class WifiAdmin { private static WifiAdmin wifiAdmin = null; private List<WifiConfiguration> mWifiConfiguration; //無線網路配置資訊類集合(網路連線列表) private List<ScanResult> mWifiList; //檢測到接入點資訊類 集合 //描述任何Wifi連線狀態 private WifiInfo mWifiInfo; WifiManager.WifiLock mWifilock; //能夠阻止wifi進入睡眠狀態,使wifi一直處於活躍狀態
public WifiManager mWifiManager; /** * 獲取該類的例項(懶漢) * @param context * @return */ public static WifiAdmin getInstance(Context context) { if(wifiAdmin == null) { wifiAdmin = new WifiAdmin(context); } return wifiAdmin; } private
WifiAdmin(Context context) { //獲取系統Wifi服務 WIFI_SERVICE this.mWifiManager = (WifiManager) context.getSystemService("wifi"); //獲取連線資訊 this.mWifiInfo = this.mWifiManager.getConnectionInfo(); } /** * 是否存在網路資訊 * @param str 熱點名稱 * @return */ private WifiConfiguration isExsits(String str) { Iterator localIterator = this.mWifiManager.getConfiguredNetworks().iterator(); WifiConfiguration localWifiConfiguration; do { if(!localIterator.hasNext()) return null; localWifiConfiguration = (WifiConfiguration) localIterator.next(); }while(!localWifiConfiguration.SSID.equals("\"" + str + "\"")); return localWifiConfiguration; } /**鎖定WifiLock,當下載大檔案時需要鎖定 **/ public void AcquireWifiLock() { this.mWifilock.acquire(); } /**建立一個WifiLock**/ public void CreateWifiLock() { this.mWifilock = this.mWifiManager.createWifiLock("Test"); } /**解鎖WifiLock**/ public void ReleaseWifilock() { if(mWifilock.isHeld()) { //判斷時候鎖定 mWifilock.acquire(); } } /**開啟Wifi**/ public void OpenWifi() { if(!this.mWifiManager.isWifiEnabled()){ //當前wifi不可用 this.mWifiManager.setWifiEnabled(true); } } /**關閉Wifi**/ public void closeWifi() { if(mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(false); } } /**埠指定id的wifi**/ public void disconnectWifi(int paramInt) { this.mWifiManager.disableNetwork(paramInt); } /**新增指定網路**/ public void addNetwork(WifiConfiguration paramWifiConfiguration) { int i = mWifiManager.addNetwork(paramWifiConfiguration); mWifiManager.enableNetwork(i, true); } /** * 連線指定配置好的網路 * @param index 配置好網路的ID */ public void connectConfiguration(int index) { // 索引大於配置好的網路索引返回 if (index > mWifiConfiguration.size()) { return; } //連線配置好的指定ID的網路 mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId, true); } /** * 根據wifi資訊建立或關閉一個熱點 * @param paramWifiConfiguration * @param paramBoolean 關閉標誌 */ public void createWifiAP(WifiConfiguration paramWifiConfiguration,boolean paramBoolean) { try { Class localClass = this.mWifiManager.getClass(); Class[] arrayOfClass = new Class[2]; arrayOfClass[0] = WifiConfiguration.class; arrayOfClass[1] = Boolean.TYPE; Method localMethod = localClass.getMethod("setWifiApEnabled",arrayOfClass); WifiManager localWifiManager = this.mWifiManager; Object[] arrayOfObject = new Object[2]; arrayOfObject[0] = paramWifiConfiguration; arrayOfObject[1] = Boolean.valueOf(paramBoolean); localMethod.invoke(localWifiManager, arrayOfObject); return; } catch (Exception e) { e.printStackTrace(); } } /** * 建立一個wifi資訊 * @param ssid 名稱 * @param passawrd 密碼 * @param paramInt 有3個引數,1是無密碼,2是簡單密碼,3是wap加密 * @param type 是"ap"還是"wifi" * @return */ public WifiConfiguration createWifiInfo(String ssid, String passawrd,int paramInt, String type) { //配置網路資訊類 WifiConfiguration localWifiConfiguration1 = new WifiConfiguration(); //設定配置網路屬性 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); //從列表中刪除指定的網路配置網路 } if(paramInt == 1) { //沒有密碼 localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if(paramInt == 2) { //簡單密碼 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熱點 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) { //沒有密碼 localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if (paramInt == 2) { //簡單密碼 localWifiConfiguration1.hiddenSSID = true;//網路上不廣播ssid localWifiConfiguration1.wepKeys[0] = passawrd; } else if (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); } } return localWifiConfiguration1; } /**獲取熱點名**/ public String getApSSID() { try { Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]); if (localMethod == null) return null; Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]); if (localObject1 == null) return null; WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1; if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID; Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile"); if (localField1 == null) return null; localField1.setAccessible(true); Object localObject2 = localField1.get(localWifiConfiguration); localField1.setAccessible(false); if (localObject2 == null) return null; Field localField2 = localObject2.getClass().getDeclaredField("SSID"); localField2.setAccessible(true); Object localObject3 = localField2.get(localObject2); if (localObject3 == null) return null; localField2.setAccessible(false); String str = (String) localObject3; return str; } catch (Exception localException) { } return null; } /**獲取wifi名**/ public String getBSSID() { if (this.mWifiInfo == null) return "NULL"; return this.mWifiInfo.getBSSID(); } /**得到配置好的網路 **/ public List<WifiConfiguration> getConfiguration() { return this.mWifiConfiguration; } /**獲取ip地址**/ public int getIPAddress() { return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress(); } /**獲取實體地址(Mac)**/ public String getMacAddress() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress(); } /**獲取網路id**/ public int getNetworkId() { return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId(); } /**獲取熱點建立狀態**/ public int getWifiApState() { try { int i = ((Integer) this.mWifiManager.getClass() .getMethod("getWifiApState", new Class[0]) .invoke(this.mWifiManager, new Object[0])).intValue(); return i; } catch (Exception localException) { } return 4; //未知wifi網絡卡狀態 } /**獲取wifi連線資訊**/ public WifiInfo getWifiInfo() { return this.mWifiManager.getConnectionInfo(); } /** 得到網路列表**/ public List<ScanResult> getWifiList() { return this.mWifiList; } /**檢視掃描結果**/ public StringBuilder lookUpScan() { StringBuilder localStringBuilder = new StringBuilder(); for (int i = 0; i < mWifiList.size(); i++) { localStringBuilder.append("Index_"+new Integer(i + 1).toString() + ":"); //將ScanResult資訊轉換成一個字串包 //其中把包括:BSSID、SSID、capabilities、frequency、level localStringBuilder.append((mWifiList.get(i)).toString()); localStringBuilder.append("\n"); } return localStringBuilder; } /** 設定wifi搜尋結果 **/ public void setWifiList() { this.mWifiList = this.mWifiManager.getScanResults(); } /**開始搜尋wifi**/ public void startScan() { this.mWifiManager.startScan(); } /**得到接入點的BSSID**/ public String GetBSSID() { return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID(); } }

相關推薦

WiFiAdminWiFi管理工具

import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.w

Hive----JDBC工具的建立使用包括HIVEsql工具---IDEA開發

  Hive-----JDBC---util package com.www.hive.util;import java.sql.*;import java.util.Date;import java.util.*;import java.util.Lis

上傳檔案動態生成目錄自定義工具

  public class UploadUtils {   // 方式一:使用用 目錄層級 分離 public static String getPath(String uuidFileName){ // 使用唯一檔名.hashCode();

工具Linux筆記之終端日誌記錄工具script

工具類 article 空間 post 令行 有時 可能 關於 edit 在學習Linux時,有時候終端的打印消息對於我們很重要,可是終端顯示也是有一定的緩沖空間的。當信息打印許多時,前面的信息就會被覆蓋掉。所以這裏網上搜索了一下這方面的介紹。現總結例如以下:

JavaWeb響應下載包含工具

文件的 瀏覽器下載 後綴 寫文件 部分 https res 文件路徑 form 紙上得來終覺淺,絕知此事要躬行!今天博主分享是關於javaweb的響應(response)下載 以下是我的Demo: 頁面我就粘主要部分的代碼 <a href = "${pageCont

高級軟件測試技術測試管理工具實踐day3

由於 其他 將他 一個 png 安裝 模塊 了解 com 昨天在晚上由於安裝bugzilla中有一些小問題,並且需要手工安裝很多perl模塊 ppm install XXX(模塊名稱)。一直到過了十二點就沒有繼續更博了。所以由今天更。 繼昨天的安裝問題之後終於安裝

高級軟件測試技術測試管理工具實踐day4

所有 作業 指導 基本使用 管理 完成 視頻 bugzilla 軟件測試技術 今天是截止日期,有胡俊輝的指導下小組成員都了解使用了Bugzilla的基本使用。大家都在晚上之前把各自的文檔匯總給汪鴻,由他撰寫了操作手冊。並且在下午楊瑞豐完成了視頻的錄制工作。但

Java學習筆記—多線程並發工具,java.util.concurrent.atomic包

配對 初始 訪問 接收 iter nco .get 執行 string 在JDK的並發包裏提供了幾個非常有用的並發工具類。CountDownLatch、CyclicBarrier和Semaphore工具類提供了一種並發流程控制的手段,Exchanger工具類則提供了在線程間

Redis 設定 Key/value 的規則定義和注意事項工具

對於redis的儲存key/value鍵值對,經過多次踩坑之後,我們總結了一套規則;這篇文章主要講解定義key/value鍵值對時的定義規則和注意事項。 前面一篇文章講了如何定義Redis的客戶端和Dubbo整合儲存器;當我們真正開始開發的時候,就會突然發現,有點不知道如何去定義Redis的K

Redis設定Key/value的規則定義和注意事項工具

對於redis的儲存key/value鍵值對,經過多次踩坑之後,我們總結了一套規則;這篇文章主要講解定義key/value鍵值對時的定義規則和注意事項。 前面一篇文章講了如何定義Redis的客戶端和Dubbo整合儲存器;當我們真正開始開發的時候,就會突然發現,有點不知道如何去定義Redis的K

網路請求資料Uitl工具

封裝工具類 package com.example.pullshuaixn; import android.annotation.SuppressLint; import android.os.AsyncTask; import com.google.gson.Gson;

關於精度問題BigDecimalUtil工具

關於精度問題 這樣寫會丟失精度 Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變數double可以處理16位有效數。 對比可知,test2仍然會出現精度問題,而在建立Bi

easypoi Excel匯入匯出 工具

1.用到的jar 紅色的必須的。 下面那些是執行起來,缺哪個就導哪個。 如果報錯提示沒有這個方法的話,重啟Tomcat,還不好使就是jar包版本不對,找個高點的版本。  easypoi-annotation-3.1.0.jar easypoi-base-3.1.0.j

檔案上傳工具

一、 import java.io.File; import java.io.IOException; import javax.servlet.http.HttpServletRequest; i

Android okHttp檔案下載並帶進度條的demo簡單工具

根據okHttp簡單的封裝了一個根據url下載檔案並更新進度的工具類,在此記錄下,以後要使用可以進行參考 先來看看效果圖: 接下來看看具體的程式碼實現 首先在:app中新增專案對於Okhttp的依賴: //okhttp compile 'com.squareup.okh

Android 常用開發工具之 SPUtils SharedPreference 工具

開發過程中難免會遇到如持久儲存使用者資訊等需求,而由於資料量很少感覺使用 Sql 有些殺雞用牛刀的感覺也有些累贅。所以善於使用 SharedPreference 可以幫助我們在本地儲存一些資料量少,又使用很頻繁的東西。 SPUtils 一個可以幫助我們很簡潔的使用  Sha

利用java生成UUID工具

package test.demo1; import java.util.UUID; public class UUIDUtil { public static String creatU

Android應用開發------------Json工具fastJson和Gson的兩種工具

json一般是Android中比較常用的與伺服器互動的資料形式。我們常用的架包來解析json字串有fastjson和gson 分別寫了兩個工具類: fastJson import java.util.ArrayList; import java.util.List;

JAVA中MD5加密MD5工具

工具類如下:import java.security.MessageDigest; /** * @Author:Starry * @Description: * @Date:Created in 9

下載檔案工具

一、 import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.net.URLConnection;