代码在Android4.4及左右版本能够正常运行
1.添加开启热点所需要的权限
<uses-permission android:name=".CHANGE_NETWORK_STATE" />
<uses-permission android:name=".ACCESS_NETWORK_STATE" />
<uses-permission android:name=".ACCESS_WIFI_STATE" />
<uses-permission android:name=".CHANGE_WIFI_STATE" />
2.开启热点(4.4正常开启)。对WiFi/WiFi热点不熟的可以看下这篇/a_zhon/article/details/52472657
public void createAp() {
//开启热点先关闭Wifi
closeWifi()
try {
WifiConfiguration apConfiguration = new WifiConfiguration()
apConfiguration.SSID = WifiAdmin.SSID
apConfiguration.preSharedKey = WifiAdmin.PassWord
apConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class)
method.invoke(mWifiManager, apConfiguration, true)
} catch (Exception e) {
e.printStackTrace()
}
}
3.解决方法一:在添加一个权限
<uses-permission android:name=".WRITE_SETTINGS" />
在我的荣耀6(H60-L02)测试还是没有效果,依旧打不开。不知道其他手机可不可以。。。
private void createWifiAp() {
//开启热点先关闭Wifi
closeWifi()
try {
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class)
method.setAccessible(true)
WifiConfiguration configuration = new WifiConfiguration()
configuration.SSID = WifiAdmin.SSID
configuration.preSharedKey = WifiAdmin.PassWord
configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN)
configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN)
configuration.allowedProtocols.set(WifiConfiguration.Protocol.WPA)
configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP)
configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP)
configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP)
configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP)
method.invoke(mWifiManager, configuration, true)
} catch (Exception e) {
e.printStackTrace()
}
}
4.解决方法二:将targetSdkVersion改成22,在我手机上亲测有用。

开启热点代码
public void createAp() {
//开启热点先关闭Wifi
closeWifi()
try {
WifiConfiguration apConfiguration = new WifiConfiguration()
apConfiguration.SSID = WifiAdmin.SSID
apConfiguration.preSharedKey = WifiAdmin.PassWord
apConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class)
method.invoke(mWifiManager, apConfiguration, true)
} catch (Exception e) {
e.printStackTrace()
}
}
为22以下的时候会走老一套的流程,所以权限在Menifest声明了就可以不需要在动态申请权限
targetSdkVersion 如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值, 他会告诉
Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。 也就是说,
如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。 但是,这个设置仅仅是一个声明、
一个通知,不会有太实质的作用, 比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低
版本中是不支持的 ,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,
此属性不会帮你解决兼容性的测试问题。 你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的
总之在6.0上开启热点,可能还是因为权限的原因导致无法开启。