Android 根据账号和密码自动连接 WIFI (兼容Android 10)

您所在的位置:网站首页 设置wifi名称和密码 Android 根据账号和密码自动连接 WIFI (兼容Android 10)

Android 根据账号和密码自动连接 WIFI (兼容Android 10)

2024-07-15 03:38| 来源: 网络整理| 查看: 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设备上就无法连接wifi,虽然提示你是连接成功了但是实际上信号一直不可用。

解决办法目前只有这个:

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设置页面 void closeWifi(); //关闭wifi boolean isWifiEnabled(); //判断wifi是否可用 void connect(String ssId, String pwd, IWifiConnectListener iWifiLogListener); //连接wifi void disConnect(String ssId,IWifiDisConnectListener listener); // 断开某个网络 } 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发送连接失败的消息 * * @param info 消息 */ public void sendErrorMsg(String info) { if (mHandler != null) { Message msg = new Message(); msg.obj = info; msg.what = -1; mHandler.sendMessage(msg);// 向Handler发送消息 } } /** * 子线程向UI主线程发送连接成功的消息 * * @param info */ public void sendSuccessMsg(String info) { if (mHandler != null) { Message msg = new Message(); msg.obj = info; msg.what = 0; mHandler.sendMessage(msg);// 向Handler发送消息 } } //WIFICIPHER_WEP是WEP ,WIFICIPHER_WPA是WPA,WIFICIPHER_NOPASS没有密码 public enum WifiCipherType { WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID } // 提供一个外部接口,传入要连接的无线网 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(); } // 查看以前是否也配置过这个网络 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开关开了 openWifi(); iWifiConnectListener.onConnectStart(); //开启wifi需要等系统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 = 0; i--) { final char c = key.charAt(i); if (!(c >= '0' && c = 'A' && c = 'a' && c


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3