android 5.1.1 setWifiApEnabled doesn't work

问题

在android 5.1 rk3229平台上使用wifiManager.setWifiApEnabled函数无法开启WiFiAP

尝试与结果

1.用远程桌面进入settings,通过UI开启ap可以成功
结论:可能是权限问题
2.检查了permission 和签名,添加了system shareUserId
结论:仍然打不开
3.查看/packages/apps/Settings的源码,负责启动AP tethering的文件叫WifiApEnabler.java
对比自己当前的代码,区别只有:

        if (enable && ((wifiState == WifiManager.WIFI_STATE_ENABLING) ||
                    (wifiState == WifiManager.WIFI_STATE_ENABLED))) {
            mWifiManager.setWifiEnabled(false);
            Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 1);
        }

Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 1);
结论:AP就这样起来了
为什么写入一个settings就可以了呢?源码注释中这么写:

       /**
        * Used to save the Wifi_ON state prior to tethering.
        * This state will be checked to restore Wifi after
        * the user turns off tethering.
        *
        */

确实这个WifiApEnabler这个类在关闭AP的时候,检查了这个settings并尝试恢复Wifi状态
然而,还是没明白为什么一个settings能导致AP起不来。法克

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容