需要权限
<!--wifi热点权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
<!--移动数据权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
/**
* 8.0 开启wifi热点方法
* @param apName wifi热点帐号
* @param apPassword wifi热点密码
*/
public boolean setWifiAp(String apName, String apPassword) {
try {
//热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
//配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = apName;
apConfig.preSharedKey = apPassword;
//不设置密码
apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
//android 8.0开启wifi热点
if (Build.VERSION.SDK_INT >= 26) {
Method configMethod = mWifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);
boolean isConfigured = (Boolean) configMethod.invoke(mWifiManager, apConfig);
method = mWifiManager.getClass().getMethod("startSoftAp", WifiConfiguration.class);
//返回热点打开状态
return (Boolean) method.invoke(mWifiManager, apConfig);
} else {
//通过反射调用设置热点
method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
//返回热点打开状态
return (Boolean) method.invoke(mWifiManager, apConfig, true);
}
} catch (NoSuchMethodException e) {
e.getMessage();
return false;
} catch (IllegalAccessException e) {
e.printStackTrace();
return false;
} catch (InvocationTargetException e) {
e.printStackTrace();
return false;
}
}
/**
* 关闭wifi 热点
* @return
*/
public boolean closeWifiAp() {
//热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
try {
//android 8.0关闭wifi热点
if (Build.VERSION.SDK_INT >= 26) {
method = mWifiManager.getClass().getDeclaredMethod("stopSoftAp");
return (Boolean) method.invoke(mWifiManager);
} else {
method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
//返回热点关闭状态
return (Boolean) method.invoke(mWifiManager, apConfig, false);
}
} catch (Exception e) {
e.getMessage();
return false;
}
}
/**
* 打开移动网络
* @param context
* @param enabled 是否打开
*/
public void setMobileDataState(Context context, boolean enabled) {
TelephonyManager telephonyService = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
try {
Method setDataEnabled = telephonyService.getClass().getDeclaredMethod("setDataEnabled",boolean.class);
if (null != setDataEnabled) {
setDataEnabled.invoke(telephonyService, enabled);
}
} catch (Exception e) {
e.printStackTrace();
}
}