package cm.android.net;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import java.util.Iterator;
import java.util.List;
import cm.java.util.Utils;
@SuppressWarnings("MissingPermission")
public class WifiUtil {
private static final Logger logger = LoggerFactory.getLogger("WifiUtil");
/**
* <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
* <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
*/
public static boolean removeNetwork(Context context, int networkId, String ssid) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
if (Utils.isEmpty(list)) {
return true;
}
String SSID = getSSID(ssid);
Iterator<WifiConfiguration> iterator = list.iterator();
while (iterator.hasNext()) {
WifiConfiguration wifiConfiguration = iterator.next();
if (wifiConfiguration.networkId == networkId && wifiConfiguration.SSID.equals(SSID)) {
return wifiManager.removeNetwork(wifiConfiguration.networkId);
}
}
return true;
}
public static int addNetwork(Context context, WifiConfig wifiConfig, boolean auto) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int netId = addNetwork(wifiManager, wifiConfig);
if (auto) {
wifiManager.enableNetwork(netId, true);
}
return netId;
}
public static int addNetwork(WifiManager wifiManager, WifiConfig wifiConfig) {
WifiConfiguration wifiConfiguration = createWifiInfo(wifiConfig);
int netId = wifiManager.addNetwork(wifiConfiguration);
return netId;
}
public static WifiConfiguration createWifiInfo(WifiConfig wifiConfig) {
logger.info("SSID = {},password = {},type = {}", getSSID(wifiConfig.ssid),
wifiConfig.password, wifiConfig.wifiType);
WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = getSSID(wifiConfig.ssid);
config.hiddenSSID = wifiConfig.hiddenSSID;
config.status = WifiConfiguration.Status.ENABLED;
// 分为三种情况:1没有密码2用wep加密3用wpa加密
if (wifiConfig.wifiType == WifiType.NOPASS) {
// config.wepKeys[0] = "";
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
// config.wepTxKeyIndex = 0;
} else if (wifiConfig.wifiType == WifiType.WEP) {
config.wepKeys[0] = "\"" + wifiConfig.password + "\"";
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.wepTxKeyIndex = 0;
} else if (wifiConfig.wifiType == WifiType.WPA) {
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.preSharedKey = "\"" + wifiConfig.password + "\"";
}
return config;
}
public static WifiConfiguration exsits(WifiManager wifiManager, String ssid) {
List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();
if (Utils.isEmpty(existingConfigs)) {
return null;
}
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals(getSSID(ssid))) {
return existingConfig;
}
}
return null;
}
public static enum WifiType {
INVALID(0), NOPASS(1), WEP(2), WPA(3), _802_1xEAP(4);
private int type;
private WifiType(int type) {
this.type = type;
}
public int getType() {
return type;
}
public boolean equals(int type) {
return this.type == type;
}
public static WifiType getType(int type) {
switch (type) {
case 1:
return NOPASS;
case 2:
return WEP;
case 3:
return WPA;
case 4:
return _802_1xEAP;
default:
return INVALID;
}
}
}
public static class WifiConfig {
public WifiType wifiType;
public String password;
public boolean hiddenSSID;
public String ssid;
}
public static String getSSID(String ssid) {
String SSID = "\"" + ssid + "\"";
return SSID;
}
public static String getWifiString(String str) {
String result = "\"" + str + "\"";
return result;
}
}