权限:
<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);
}
该文章详细介绍了在Android中进行WiFi管理所需的一系列权限,包括开启/关闭WiFi、搜索附近WiFi、获取扫描结果以及建立和连接WiFi配置。特别提到了在API28以上版本中自动连接WiFi的问题,并给出了创建和连接WPA/WPA2加密WiFi的示例代码。
1220

被折叠的 条评论
为什么被折叠?



