WifiManager似乎没有提交更改

时间:2012-03-08 15:48:05

标签: android wifi

在我的应用中,我尝试连接特定的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进行测试。

修改: 刚刚意识到,关闭和打开显示器后,所有设置都恢复正常(即启用网络)。在其他设备上也有不同的(正确的)行为。

1 个答案:

答案 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);
        }
    }
}