最近需要实现热点的自动,但是各种方式之后只能实现Android 8.0以下的稳定实现;
public class HotPointHelper {
public static boolean openAp(Context context) {
if (context == null) {
return false;
}
if (isApOn(context)) {
return false;
}
if (!checkPermission(context)) {
return false;
}
WifiManager wifimanager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifimanager == null) {
return false;
}
//开启热点需要关闭wifi
if (wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(false);
}
//需要设置一个自定义热点,不能直接使用 new WifiConfiguration() ,必须有配置信息
WifiConfiguration wifiConfiguration = createConfig("1", "1");
//使用反射开启Wi-Fi热点
Method method;
try {
method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
method.invoke(wifimanager, wifiConfiguration, true);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private static boolean checkPermission(Context context) {
//安卓6以上的特殊处理
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.System.canWrite(context)) {
context.startActivity(new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS));
return false;
}
}
return true;
}
private static boolean isApOn(Context context) {
WifiManager wifimanager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE);
if (wifimanager != null) {
Method method = null;
try {
method = wifimanager.getClass().getDeclaredMethod("isWifiApEnabled");
method.setAccessible(true);
return (boolean) method.invoke(wifimanager);
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
private static void closeAp(Application context) {
try {
WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
Method method = wifimanager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
method.invoke(wifimanager, null, false);
} catch (Exception e) {
e.printStackTrace();
}
}
private static WifiConfiguration createConfig(String SSID, String pwd) {
if (TextUtils.isEmpty(pwd)) {
return null;
}
WifiConfiguration config = new WifiConfiguration();
config.SSID = SSID;
config.preSharedKey = pwd;
config.status = WifiConfiguration.Status.ENABLED;
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);
return config;
}
}



