WifiManager не фиксирует изменения - PullRequest
1 голос
/ 08 марта 2012

В моем приложении я пытаюсь подключиться к определенной точке доступа Wi-Fi. Однако это устанавливает ранее активные сети как «отключенные». Я устанавливаю соединение, вызывая WifiManager.enableNetwork(int netId, boolean disableOthers) с настройкой disableOthers в true, что, по-видимому, необходимо для надежного установления соединения. Таким образом, после повторного включения Wi-Fi вручную (например, с помощью виджета управления питанием) устройство не будет подключаться к предварительно настроенным сетям, которые отображаются в списке как «отключенные». Я попытался обойти это, установив статус каждой ранее активной сети обратно на 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

Я знаю эту старую ошибку Android , но не знаю (т.е. не надеюсь), что это связано с моей проблемой. Я тестирую с Nexus S под управлением 2.3.6.

EDIT : Просто понял, что при выключении и включении дисплея все настройки возвращаются к нормальным (то есть сети включены). Также отличается (правильное) поведение на других устройствах.

1 Ответ

0 голосов
/ 14 января 2014

Я знаю, что это очень старая версия, но вместо обновления поля в конфигурации вам следует просто снова вызвать 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);
        }
    }
}
...