权限:
<uses-permission android:name="android.permission.NETWORK_SETTINGS"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
核心api:
WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// 打开WIFI public void openWifi() { if (!mWifiManager.isWifiEnabled()) { mWifiManager.setWifiEnabled(true); } }
//搜索wifi private void getNearbyWifi(){ openWifi(); wifiAdmin.startScan(); }
//获取搜索到的wifi结果,扫描到wifi,系统会发出广播,定义一个recever并在其中拿到扫描结果
IntentFilter filter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION); registerReceiver(mWifiScanReceiver, filter); // 注册WiFi扫描的广播接收器mWifiManager.getScanResults();
连接wifi,这里有个坑,需要吧targetSDKVersion定位28。目前对于高于28的target,我无法实现自动连接wifi。下面是wpa/wpa2的密码加密方式,其它的wifi密码加密方式由于被淘汰很久了,我没有copy。
public WifiConfiguration CreateWifiInfo(String SSID, String Password) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; WifiConfiguration tempConfig = this.IsExsits(SSID); if (tempConfig != null) { mWifiManager.removeNetwork(tempConfig.networkId); } 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; }
// 添加一个网络并连接 public void addNetwork(WifiConfiguration wcg) { int wcgID = mWifiManager.addNetwork(wcg); boolean b = mWifiManager.enableNetwork(wcgID, true); System.out.println("a----" + wcgID); System.out.println("b----" + b); boolean r = mWifiManager.reconnect(); System.out.println("r----" + r); }