在我的应用中,我尝试连接特定的wifi接入点。但是,这会将先前活动的网络设置为“已禁用”。我通过调用WifiManager.enableNetwork(int netId, boolean disableOthers)
并将disableOthers
设置为true
来建立连接,这似乎是可靠地建立连接所必需的。因此,在再次手动启用wifi之后(例如,使用电源控制小部件),设备将不与先前配置的网络连接,该网络在网络列表中显示为“禁用”。我试图通过使用WifiConfiguration.Status.ENABLED
将每个先前活动网络的状态设置回WifiManager
来避免这种情况:
...
List<WifiConfiguration> wifis = wifiManager.getConfiguredNetworks();
...
wifiConfiguration.status = WifiConfiguration.Status.ENABLED;
wifiManager.updateNetwork(wifiConfiguration);
...
wifiManager.saveConfiguration();
但是,即使saveConfiguration()
返回true(成功),网络的状态字段仍为WifiConfiguration.Status.DISABLED
。在操作过程中,我收到以下日志消息:
03-08 16:14:26.125: W/BackupManagerService(110): dataChanged but no participant pkg='com.android.providers.settings' uid=10060
我知道this old Android bug,但不知道(即不希望)它与我的问题有关。我正在使用运行2.3.6的Nexus S进行测试。
修改: 刚刚意识到,关闭和打开显示器后,所有设置都恢复正常(即启用网络)。在其他设备上也有不同的(正确的)行为。
答案 0 :(得分:0)
我知道这已经很老了,但是不应该更新配置中的字段,而应该只为每个配置再次调用enableNetwork(int, boolean)
。例如:
WifiManager mgr = (WifiManager) getSystemService(Context.WIFI_SERVICE);
List<WifiConfiguration> networks = mgr.getConfiguredNetworks();
if (networks != null) {
for (WifiConfiguration network : networks) {
if (WifiConfiguration.Status.DISABLED == network.status) {
mgr.enableNetwork(network.networkId, false);
}
}
}