代码在Android4.4及左右版本能够正常运行

1.添加开启热点所需要的权限

<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

2.开启热点(4.4正常开启)。

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="android.permission.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,在我手机上亲测有用。

android wifi热点打不开 安卓开不了热点_6-0

开启热点代码

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();
        }
    }

5.targetSdkVersion为22以下的时候会走老一套的流程,所以权限在Menifest声明了就可以不需要在动态申请权限

targetSdkVersion 如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值, 他会告诉
 Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。 也就是说,
 如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。 但是,这个设置仅仅是一个声明、
 一个通知,不会有太实质的作用, 比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低
 版本中是不支持的 ,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,
 此属性不会帮你解决兼容性的测试问题。 你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的

总之在6.0上开启热点,可能还是因为权限的原因导致无法开启。