Android 6.0.1无法以编程方式启用wifi热点

chi*_*kaS 8 android android-wifi android-permissions android-6.0-marshmallow

当我尝试从以下代码启用wifi网络共享时,它会抛出异常

java.lang.reflect.Method.invoke(Native Method)中的java.lang.reflect.InvocationTargetException.

....未授予此权限:android.permission.WRITE_SETTINGS

但这在Android 6.0及以下版本中运行良好.并尝试给予android.permission.WRITE_SETTINGS.

在Android 6.1中访问wifiAP有任何限制吗?

请关注我附加了用于启用热点的代码示例.

            WifiConfiguration netConfig = new WifiConfiguration();
            netConfig.SSID = ssId;
            netConfig.preSharedKey = passkey;
            netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
            netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

            try {
                boolean apstatus = (Boolean) method.invoke(wifiManager, netConfig, true);

                for (Method isWifiApEnabledmethod : wmMethods) {
                    if (isWifiApEnabledmethod.getName().equals("isWifiApEnabled")) {
                        while (!(Boolean) isWifiApEnabledmethod.invoke(wifiManager)) {}

                        for (Method method1 : wmMethods) {
                            if (method1.getName().equals("getWifiApState")) {
                                int apstate;
                                apstate = (Integer) method1.invoke(wifiManager);
                                Log.i(TAG, "Apstate ::: " + apstate);
                            }
                        }
                    }
                }

                if (apstatus) {
                    Log.d(TAG, "Access Point created");
                } else {
                    Log.d(TAG, "Access Point creation failed");
                }

            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
Run Code Online (Sandbox Code Playgroud)

chi*_*kaS 2

这不是正确的方法。但这解决了问题。

将目标 sdk 版本更改为 21。即使在 android 6.0.1 中,热点也会以编程方式启动。认为对于 android 6 及更高版本应该有一个正确的方法来做到这一点。我认为请求运行时权限需要执行此类进程。 这里讲的是android运行时的权限请求