国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

檢測wifi是否開啟,連接指定wifi

2019-11-09 14:38:30
字體:
來源:轉載
供稿:網友

首先,想要控制手機wifi狀態,必須獲得權限,我們需要在清單文件中添加權限;

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission><!-- 允許程序改變網絡鏈接狀態 --> <uses-permission android:name="android.permission.access_WIFI_STATE"></uses-permission><!--允許程序訪問訪問WIFI網絡狀態信息 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 允許程序改變WIFI鏈接狀態 -->

我們創建一個wifi管理的工具類:

package com.xiao.androidzhujie;import android.content.Context;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiManager;import android.text.TextUtils;import android.util.Log;import java.util.List;/** * Created by 燕瀟灑 on 2017/2/9. * 打開wifi,并且連接指定wifi */public class WifiAutoConnectManager { PRivate static final String TAG = WifiAutoConnectManager.class.getSimpleName(); WifiManager wifiManager; // 定義幾種加密方式,一種是WEP,一種是WPA,還有沒有密碼的情況 public enum WifiCipherType { /** * WEP(有線等效加密)——采用WEP 64位或者128位數據加密。 */ WIFICIPHER_WEP, /** * WPA-PSK [TKIP]——采用預共享密鑰的Wi-Fi保護訪問,采用WPA-PSK標準加密技術,加密類型為TKIP。 * WPA2-PSK [AES]——采用預共享密鑰的Wi-Fi保護訪問(版本2),采用WPA2-PSK標準加密技術,加密類型為AES。 * WPA-PSK [TKIP] + WPA2-PSK [AES]——允許客戶端使用WPA-PSK [TKIP]或者WPA2-PSK [AES]。 */ WIFICIPHER_WPA, /** * 沒有密碼 */ WIFICIPHER_NOPASS, WIFICIPHER_INVALID } // 構造函數 public WifiAutoConnectManager(WifiManager wifiManager) { this.wifiManager = wifiManager; } // 構造函數 public WifiAutoConnectManager(Context context) { this.wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); } /** * 提供一個外部接口,傳入要連接的無線網 * @param ssid WIFI無線網絡的名稱 * @param passWord WIFI網絡密碼 * @param type WIFI類型() */ public void connect(String ssid, String password, WifiCipherType type) { Thread thread = new Thread(new ConnectRunnable(ssid, password, type)); thread.start(); } // 查看以前是否也配置過這個網絡 private WifiConfiguration isExsits(String SSID) { List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("/"" + SSID + "/"")) { return existingConfig; } } return null; } private WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type) { System.out.println("獲得通知連接wifi"+SSID+Password); //配置wifi網絡 WifiConfiguration config = new WifiConfiguration(); //此配置支持的身份驗證協議集 config.allowedAuthAlgorithms.clear(); //分組密碼支持的配置設置 config.allowedGroupCiphers.clear(); //該配置支持的密鑰管理協議集 config.allowedKeyManagement.clear(); //該配置支持WPA兩兩密碼設置 config.allowedPairwiseCiphers.clear(); //此配置支持的安全協議集 config.allowedProtocols.clear(); config.SSID = "/"" + SSID + "/""; // 沒有密碼 if (Type == WifiCipherType.WIFICIPHER_NOPASS) { config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } // wep加密 if (Type == WifiCipherType.WIFICIPHER_WEP) { if (!TextUtils.isEmpty(Password)) { if (isHexWepKey(Password)) { config.wepKeys[0] = Password; } else { config.wepKeys[0] = "/"" + Password + "/""; } } config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } // wpa加密 if (Type == WifiCipherType.WIFICIPHER_WPA) { config.preSharedKey = "/"" + Password + "/""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); // 此處需要修改否則不能自動重聯 // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } return config; } // 打開wifi功能 private boolean openWifi() { boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); System.out.println("wifi沒有打開,執行打開!"); } System.out.println("wifi已經打開"); return bRet; } class ConnectRunnable implements Runnable { //wifi名稱 private String ssid; //wifi密碼 private String password; //加密類型 private WifiCipherType type; public ConnectRunnable(String ssid, String password, WifiCipherType type) { this.ssid = ssid; this.password = password; this.type = type; } @Override public void run() { // 打開wifi openWifi(); // 開啟wifi功能需要一段時間(我在手機上測試一般需要1-3秒左右),所以要等到wifi // 狀態變成WIFI_STATE_ENABLED的時候才能執行下面的語句 while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) { try { // 為了避免程序一直while循環,讓它睡個100毫秒檢測…… Thread.sleep(100); } catch (InterruptedException ie) { } } WifiConfiguration wifiConfig = createWifiInfo(ssid, password, type); // if (wifiConfig == null) { Log.d(TAG, "wifiConfig is null!"); return; } WifiConfiguration tempConfig = isExsits(ssid); if (tempConfig != null) { wifiManager.removeNetwork(tempConfig.networkId); } int netID = wifiManager.addNetwork(wifiConfig); boolean enabled = wifiManager.enableNetwork(netID, true); Log.d(TAG, "enableNetwork status enable=" + enabled); boolean connected = wifiManager.reconnect(); Log.d(TAG, "enableNetwork connected=" + connected); } } private static boolean isHexWepKey(String wepKey) { final int len = wepKey.length(); // WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?) if (len != 10 && len != 26 && len != 58) { return false; } return isHex(wepKey); } private static boolean isHex(String key) { for (int i = key.length() - 1; i >= 0; i--) { final char c = key.charAt(i); if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f')) { return false; } } return true; }}

由于,此工具類是本人搜索獲得,目前正在思考每一塊的功能,這里先給大家貼出代碼,后面再做詳細解釋. 最后,我們在Activity中使用它:工具類中有兩個構造函數,我們可以任選一個。 獲取wifiManager服務:

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

然后調用下面方法中的任意一個,如果使用第一種方法,需要傳入WifiManager對象,如果選擇第二種,只需要傳入上下文即可:

/** * 打開并連接指定wifi */ public void sendMsgOp(){ WifiAutoConnectManager wifiAutoConnectManager = new WifiAutoConnectManager(wifiManager); wifiAutoConnectManager.connect("theten52","1122334452", WifiAutoConnectManager.WifiCipherType.WIFICIPHER_WPA); System.out.println("獲得通知連接wifi"); } /** * 打開并連接指定wifi */ public void sendMsgOp(String... args){ WifiAutoConnectManager wifiAutoConnectManager = new WifiAutoConnectManager(this); wifiAutoConnectManager.connect("theten52","1122334452", WifiAutoConnectManager.WifiCipherType.WIFICIPHER_WPA); System.out.println("獲得通知連接wifi"); }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙城县| 肃南| 绥棱县| 晋宁县| 山丹县| 乐安县| 高陵县| 枣庄市| 光山县| 尚志市| 巢湖市| 纳雍县| 南汇区| 古交市| 安陆市| 潼南县| 丁青县| 酒泉市| 大兴区| 永城市| 剑阁县| 文成县| 常宁市| 香河县| 察雅县| 永福县| 嘉兴市| 海口市| 青川县| 曲阜市| 吉水县| 黄陵县| 明星| 宁化县| 吴桥县| 延安市| 龙井市| 恭城| 新密市| 抚顺县| 深水埗区|