Проверка сигнала сети Wi-Fi в спящем режиме

Моя цель - иметь возможность сканировать изменения в сетях Wi-Fi (в основном, чтобы проверить, какие сети доступны). Точно знаю, что я делаю это, регистрируя получателя:

registerReceiver(wifiReceiver, new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));

где WifiReceiver это мой BroadcastReceiver.

Проблема в том, что работает только при включенном телефоне. Как только он переходит в спящий режим (либо нажатием кнопки питания, либо через какое-то время), приемник прекращает прием. Я уже получил блокировку пробуждения в onCreate моего основного класса и выпустил ее в onDestroy (это частичная блокировка пробуждения). Кроме того, я пробовал это:

Settings.System.putInt(getContentResolver(),Settings.System.WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_NEVER);

чтобы Wi-Fi не спал. К сожалению, это не помогло.

Есть ли возможность сканировать изменения сети, даже когда телефон спит? Я хочу иметь возможность проверить, какие сети находятся в зоне действия (по SSID). Может быть, я должен использовать другое действие?

Ценю вашу помощь.


person porkshire    schedule 21.07.2011    source источник


Ответы (2)


Буквально нет, аппаратное обеспечение обычно не предназначено, а низкоуровневые драйверы не написаны для обеспечения работы Wi-Fi, когда процессор приложения находится в спящем режиме - в отличие от случая с интерфейсом мобильной сети, который предназначен для получения push-событий, таких как телефонные звонки, sms и gmail "щекочет".

Таким образом, ваш выбор состоит в том, чтобы либо успешно предотвратить переход устройства в спящий режим (прощай, батарея), либо периодически просыпаться с помощью будильника, отключать активный Wi-Fi и опрашивать ситуацию (все еще не очень хорошо для времени автономной работы, но не так радикально) .

person Chris Stratton    schedule 21.07.2011
comment
Как я уже писал, я получаю блокировку пробуждения в методе onCreate (PARTIAL_WAKE_LOCK), который должен поддерживать работу процессора с выключенным экраном, но Wi-Fi по-прежнему не отправляет обновления с приемником. Будет ли будильник работать лучше, чем блокировка пробуждения? Я хочу обновить состояние сети, не включая экран (я знаю, что это все равно, вероятно, не будет хорошо для времени автономной работы). - person porkshire; 22.07.2011
comment
@porkshire В дополнение к тому, чтобы телефон не спал, вам, возможно, придется найти способ периодически отключать Wi-Fi, чтобы он оставался активным. Это может означать, что парадигма опроса, а не приемника событий может быть предпочтительнее. - person Chris Stratton; 22.07.2011

Я боюсь, что это поведение сна управляется системой (на Android 2.3.4) в разделе «Настройки»> «Беспроводные сети»> «Настройки Wi-Fi»> Нажмите «Меню»> «Дополнительно»> «Политика сна Wi-Fi».

На самом деле это может пойти против воли пользователей, будьте осторожны с этим.

Однако я думаю, что должен быть способ изменить этот параметр. программно, используя эти настройки: Settings.System и конечно соответствующее разрешение в вашем манифесте.

person olamotte    schedule 21.07.2011
comment
Я уже изменил эту политику второй командой, о которой писал. Не помогло. - person porkshire; 21.07.2011
comment
Я видел это, извините, если это было неясно, но я имел в виду, что это должно быть что-то связанное с этим. - person olamotte; 22.07.2011
comment
Я много читал, что эта настройка вряд ли чем-то поможет. Многие говорят, что это зависит от устройства, но кажется, что почти на всех это не работает должным образом. - person porkshire; 22.07.2011
comment
Большинство чтений, которые у меня были об этом, резюмируются как FMHO только для чтения. - person olamotte; 22.07.2011