package cm.android.net;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import cm.java.util.Reflect;
public class WifiApUtil {
public static final int WIFI_AP_STATE_DISABLING = 10;
/**
* Wi-Fi AP is disabled.
*/
public static final int WIFI_AP_STATE_DISABLED = 11;
/**
* Wi-Fi AP is currently being enabled. The state will change to
* {@link #WIFI_AP_STATE_ENABLED} if it finishes successfully.
*/
public static final int WIFI_AP_STATE_ENABLING = 12;
/**
* Wi-Fi AP is enabled.
*/
public static final int WIFI_AP_STATE_ENABLED = 13;
private WifiApUtil() {
}
public static void openWifiAp(WifiManager wifiManager, String ssid, String passwd) {
WifiConfiguration config = createWifiApConfig(ssid, passwd);
setWifiApEnabled(wifiManager, config, true);
}
public static WifiConfiguration createWifiApConfig(String ssid, String passwd) {
WifiConfiguration netConfig = new WifiConfiguration();
// netConfig.SSID = WifiUtil.getSSID(ssid);
// netConfig.preSharedKey = WifiUtil.getWifiString(passwd);
netConfig.SSID = ssid;
netConfig.preSharedKey = passwd;
netConfig.allowedAuthAlgorithms
.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
netConfig.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.WPA_PSK);
netConfig.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.CCMP);
netConfig.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.TKIP);
netConfig.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.CCMP);
netConfig.allowedGroupCiphers
.set(WifiConfiguration.GroupCipher.TKIP);
return netConfig;
}
public static void closeWifiAp(WifiManager wifiManager) {
try {
WifiConfiguration config = Reflect.bind(wifiManager).call("getWifiApConfiguration");
setWifiApEnabled(wifiManager, config, false);
} catch (Reflect.ReflectException e) {
}
// ObjectProxy proxy = new ObjectProxy(wifiManager);
// Method method = proxy.getMethod("getWifiApConfiguration");
// WifiConfiguration config = proxy.doMethod(method);
}
public static boolean setWifiApEnabled(WifiManager wifiManager, WifiConfiguration config,
boolean enable) {
if (enable && wifiManager.isWifiEnabled()) {
//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
wifiManager.setWifiEnabled(false);
}
try {
return Reflect.bind(wifiManager).method("setWifiApEnabled", config.getClass(), Boolean.TYPE).call(config, enable);
} catch (Reflect.ReflectException e) {
return false;
}
// ObjectProxy proxy = new ObjectProxy(wifiManager);
// Method method = proxy.getMethod("setWifiApEnabled", config.getClass(), Boolean.TYPE);
// Boolean result = proxy.doMethod(method, config, enable);
// if (result != null) {
// return result;
// }
// return false;
}
public static boolean isWifiApEnabled(WifiManager wifiManager) {
try {
return Reflect.bind(wifiManager).call("isWifiApEnabled");
} catch (Reflect.ReflectException e) {
return false;
}
// ObjectProxy proxy = new ObjectProxy(wifiManager);
// Method method = proxy.getMethod("isWifiApEnabled");
// Boolean result = proxy.doMethod(method);
// if (result != null) {
// return result;
// }
// return false;
}
public static int getWifiApState(WifiManager wifiManager) {
try {
return Reflect.bind(wifiManager).call("getWifiApState");
} catch (Reflect.ReflectException e) {
return 0;
}
// ObjectProxy proxy = new ObjectProxy(wifiManager);
// Method method = proxy.getMethod("getWifiApState");
// Integer result = proxy.doMethod(method);
// if (result != null) {
// return result;
// }
// return 0;
}
}