问题
在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起不来。法克