<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          Android 根據(jù)賬號和密碼自動連接 WIFI (兼容Android 10) 您所在的位置:網(wǎng)站首頁 屬豬和雞住幾樓好風(fēng)水 Android 根據(jù)賬號和密碼自動連接 WIFI (兼容Android 10)

          Android 根據(jù)賬號和密碼自動連接 WIFI (兼容Android 10)

          #Android 根據(jù)賬號和密碼自動連接 WIFI (兼容Android 10)| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          源碼地址在這里在這里!!!!!master分支哈

          文章目錄 1 遇到困難2 源代碼2.1 IWifiConnectListener.java2.2 IWifiDisConnectListener.java2.3 IWifiManager.java2.4 WifiConnector.java2.5 WifiManagerProxy.java2.6 MainActivity.java

          1 遇到困難

          面向谷歌搜索了很多博客,基本上都是失效的,只要你的compileSdkVersion版本高于28在Android 10設(shè)備上就無法連接wifi,雖然提示你是連接成功了但是實(shí)際上信號一直不可用。

          解決辦法目前只有這個:

          compileSdkVersion 28 // 版本號降到28或者更低

          我們考慮整個WIFI自動連接過程會遇到哪些情況哈?

          在這里插入圖片描述

          2 源代碼 2.1 IWifiConnectListener.java public interface IWifiConnectListener { //開始連接 void onConnectStart(); // 連接成功 void onConnectSuccess(); //連接失敗 void onConnectFail(String errorMsg); } 2.2 IWifiDisConnectListener.java public interface IWifiDisConnectListener { //斷開成功 void onDisConnectSuccess(); //斷開失敗 void onDisConnectFail(String errorMsg); } 2.3 IWifiManager.java public interface IWifiManager { void init(Application application); void openWifi(); //打開Wifi void openWifiSettingPage(Activity activity); //打開wifi設(shè)置頁面 void closeWifi(); //關(guān)閉wifi boolean isWifiEnabled(); //判斷wifi是否可用 void connect(String ssId, String pwd, IWifiConnectListener iWifiLogListener); //連接wifi void disConnect(String ssId,IWifiDisConnectListener listener); // 斷開某個網(wǎng)絡(luò) } 2.4 WifiConnector.java private IWifiConnectListener iWifiConnectListener; private WifiManager wifiManager; private Handler mHandler = new Handler(Looper.getMainLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (iWifiConnectListener != null) { switch (msg.what) { case 0: iWifiConnectListener.onConnectSuccess(); break; case -1: iWifiConnectListener.onConnectFail(" fail = " + msg.obj); break; default: break; } } } }; public void init(WifiManager wifiManager) { if (wifiManager == null) { throw new IllegalArgumentException("WifiConnector wifiManager cant be null!"); } this.wifiManager = wifiManager; } private void checkInit() { if (wifiManager == null) { throw new IllegalArgumentException("You must call init() before other methods!"); } if (iWifiConnectListener == null) { throw new IllegalArgumentException("IWifiConnectListener cant be null!"); } } /** * 子線程要向UI發(fā)送連接失敗的消息 * * @param info 消息 */ public void sendErrorMsg(String info) { if (mHandler != null) { Message msg = new Message(); msg.obj = info; msg.what = -1; mHandler.sendMessage(msg);// 向Handler發(fā)送消息 } } /** * 子線程向UI主線程發(fā)送連接成功的消息 * * @param info */ public void sendSuccessMsg(String info) { if (mHandler != null) { Message msg = new Message(); msg.obj = info; msg.what = 0; mHandler.sendMessage(msg);// 向Handler發(fā)送消息 } } //WIFICIPHER_WEP是WEP ,WIFICIPHER_WPA是WPA,WIFICIPHER_NOPASS沒有密碼 public enum WifiCipherType { WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID } // 提供一個外部接口,傳入要連接的無線網(wǎng) public void connect(String ssid, String password, WifiCipherType type, IWifiConnectListener listener) { this.iWifiConnectListener = listener; Thread thread = new Thread(new ConnectRunnable(ssid, password, type)); thread.start(); } // 查看以前是否也配置過這個網(wǎng)絡(luò) public WifiConfiguration isExsits(String SSID) { List existingConfigs = wifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\"" + SSID + "\"")) { return existingConfig; } } return null; } public WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; // config.SSID = SSID; // nopass if (Type == WifiCipherType.WIFICIPHER_NOPASS) { // config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); // config.wepTxKeyIndex = 0; } else if (Type == WifiCipherType.WIFICIPHER_WEP) {// 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; } else if (Type == WifiCipherType.WIFICIPHER_WPA) {// wpa config.preSharedKey = "\"" + Password + "\""; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); config.allowedProtocols.set(WifiConfiguration.Protocol.RSN); config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.status = WifiConfiguration.Status.ENABLED; } return config; } // 打開wifi功能 private boolean openWifi() { checkInit(); boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); } return bRet; } class ConnectRunnable implements Runnable { private String ssid; 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() { checkInit(); try { // 如果之前沒打開wifi,就去打開 確保wifi開關(guān)開了 openWifi(); iWifiConnectListener.onConnectStart(); //開啟wifi需要等系統(tǒng)wifi刷新1秒的時間 Thread.sleep(1000); // 如果wifi沒開啟的話就提示錯誤 if (wifiManager.getWifiState() == WifiManager.WIFI_STATE_DISABLED) { sendErrorMsg("WIFI 未開啟"); return; } // 開啟wifi之后開始掃描附近的wifi列表 wifiManager.startScan(); Thread.sleep(500); boolean hasSsIdWifi = false; List scanResults = wifiManager.getScanResults(); for (int i = 0; i hasSsIdWifi = true; break; } } // 如果就沒這個wifi的話直接返回 if (!hasSsIdWifi) { sendErrorMsg("當(dāng)前不存在指定的Wifi!"); return; } //禁掉所有wifi for (WifiConfiguration c : wifiManager.getConfiguredNetworks()) { wifiManager.disableNetwork(c.networkId); } //看看當(dāng)前wifi之前配置過沒有 boolean enabled = false; WifiConfiguration tempConfig = isExsits(ssid); if (tempConfig != null) { enabled = wifiManager.enableNetwork(tempConfig.networkId, true); } else { WifiConfiguration wifiConfig = createWifiInfo(ssid, password, type); if (wifiConfig == null) { sendErrorMsg("wifiConfig is null!"); return; } int netID = wifiManager.addNetwork(wifiConfig); enabled = wifiManager.enableNetwork(netID, true); } if (enabled) { sendSuccessMsg("連接成功! enabled = " + enabled); } else { sendErrorMsg("連接失敗! enabled = false"); } } catch (Exception e) { sendErrorMsg(e.getMessage()); e.printStackTrace(); } } } private 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 boolean isHex(String key) { for (int i = key.length() - 1; i >= 0; i--) { final char c = key.charAt(i); if (!(c >= '0' && c = 'A' && c = 'a' && c private static final WifiManagerProxy INSTANCE = new WifiManagerProxy(); } private WifiManagerProxy() { } public static WifiManagerProxy get() { return SingletonHolder.INSTANCE; } private WifiManager manager; private WifiConnector mConnector = new WifiConnector(); private void checkInit() { if (manager == null) { throw new IllegalArgumentException("You must call init() before other methods!"); } } @Override public void init(Application application) { if (application == null) { throw new IllegalArgumentException("Application cant be null!"); } if (manager == null) { manager = (WifiManager) application.getSystemService(Context.WIFI_SERVICE); mConnector.init(manager); } } @Override public void openWifi() { checkInit(); if (!isWifiEnabled()) { manager.setWifiEnabled(true); } } @Override public void openWifiSettingPage(Activity activity) { checkInit(); if (activity == null) { return; } activity.startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); } @Override public void closeWifi() { checkInit(); if (isWifiEnabled()) { manager.setWifiEnabled(false); } } @Override public boolean isWifiEnabled() { checkInit(); return manager.isWifiEnabled(); } @Override public void connect(String ssId, String pwd, IWifiConnectListener listener) { checkInit(); if (listener == null) { throw new IllegalArgumentException(" IWifiConnectListener cant be null !"); } mConnector.connect(ssId, pwd, WifiConnector.WifiCipherType.WIFICIPHER_WPA, listener); } @Override public void disConnect(String ssId, IWifiDisConnectListener listener) { checkInit(); if (listener == null) { throw new IllegalArgumentException(" IWifiDisConnectListener cant be null !"); } if (TextUtils.isEmpty(ssId)) { listener.onDisConnectFail(" WIFI名稱不能為空! "); return; } ssId = "\"" + ssId + "\""; WifiInfo wifiInfo = manager.getConnectionInfo(); if (wifiInfo != null && !TextUtils.isEmpty(ssId) && TextUtils.equals(ssId, wifiInfo.getSSID())) { int netId = wifiInfo.getNetworkId(); manager.disableNetwork(netId); listener.onDisConnectSuccess(); } else { listener.onDisConnectFail(" wifi狀態(tài)異常 或者 此時就沒有連接上對應(yīng)的WIFI ! "); } } 2.6 MainActivity.java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); test(); } private void test() { WifiManagerProxy.get().init(getApplication()); WifiManagerProxy.get().connect("xxx", "xxx", new IWifiConnectListener() { @Override public void onConnectStart() { Log.i("TAG", "onConnectStart: "); } @Override public void onConnectSuccess() { Log.i("TAG", "onConnectSuccess: "); } @Override public void onConnectFail(String errorMsg) { Log.i("TAG", "onConnectFail: " + errorMsg); } }); } }


          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 永吉县| 宿州市| 呼伦贝尔市| 巴塘县| 昌邑市| 景谷| 普格县| 通州区| 茂名市| 永泰县| 昌吉市| 长岭县| 开远市| 涞水县| 光泽县| 乐至县| 禄丰县| 中西区| 绥中县| 定远县| 太原市| 深州市| 商洛市| 平利县| 涪陵区| 长宁区| 乾安县| 昆明市| 托里县| 博白县| 梁山县| 固阳县| 台中县| 琼海市| 平度市| 宜良县| 邳州市| 上林县| 樟树市| 陆川县| 临沧市| http://444 http://444 http://444 http://444 http://444 http://444