2013-10-08 2 views
0

Я использую AlarmManager для запуска периодически повторяющегося сигнала тревоги. Мне нужно, чтобы Wi-Fi всегда оставался подключенным, поэтому я считаю, что нужен Wi-Fi на Wi-Fi. Мне непонятно, где я создаю этот wakelock и не создаю его каждый раз, когда срабатывает будильник. В моем приложении нет никаких действий.Создайте Wakelock Wi-Fi для тревоги AlarmManager

Я знаю, что я могу назначить тег для wakelock, но, похоже, не существует никакого способа опросить Android, чтобы узнать, существует ли вакелок с тегом. Если бы я мог это сделать, я мог бы сказать, что вакелок уже существует, когда тревога срабатывает и не беспокоит ее воссоздание. Или есть альтернативное решение?

ответ

0

Я думаю, что есть способ получить список существующих wakelocks (с тегами), но я сомневаюсь, является ли это правильным решением. Просмотрите приложение, например, «детектор wakelock» - я считаю, что он извлекает список и сопоставляет теги с известным списком тегов, чтобы выяснить, какое приложение его создало. Также обратите внимание на продолжительность блокировок слежения - процессорный валок предназначен для очень короткого использования. Я не знаю, каков период ваших тревог, но похоже, что вы намереваетесь долго держать валок.

Когда вы ссылаетесь на «wakelock on the Wi-Fi», я предполагаю, что вы просто имеете в виду обычный вакелон - на экране и на процессоре есть wakelocks, но нет такой вещи, как wakelock для Wi-Fi , Кроме того, найти свой собственный wakelock по тегу не имеет смысла для меня - если у вас еще нет ссылки на ваш wakelock, то как вы можете его отпустить?

Вы пишете, что вам «нужно, чтобы Wi-Fi всегда оставался подключенным». Если Wi-Fi AP остается доступным, Wi-Fi останется подключенным, даже если устройство переходит в режим сна, пока пользователь не изменил настройку «держать WiFi во время сна». Ваше приложение может проверить этот параметр.

1

Мне пришлось столкнуться с похожим сценарием. Я также пользователь AlarmManager периодически запускаю службу, где WiFi должен быть включен всегда, даже если экран телефона заблокирован. Я обнаружил, что изменение политики сна Wi-Fi, как вручную, так и программно, было достаточно для многих устройств и не нужно было использовать wakelock. Однако на некоторых устройствах HTC я обнаружил, что этот параметр не работает вообще ночью. Я наблюдал за своим приложением и узнал, что Wi-Fi отключится между 00:00 (полночь) и 7:00 по утрам - все время будет работать как шарм. Я также нашел пост в другом месте (не StackOverflow), где автор упомянул что-то о специальных настройках для HTC телефонов в состоянии справиться с этой проблемой:

Settings.System.putInt(getContentResolver(), "smartsync_turn_off_wifi", 0);

Это произошло примерно один и полтора года назад, и используя этот параметр, я сохранил на любом устройстве HTC до Android 3.1, по крайней мере до недавнего времени. Не так давно некоторые пользователи нашего приложения сообщают, что их HTCs с Android 4.x не делают то, что они должны делать, потому что WiFi отключается ночью, поэтому кажется, что таинственная настройка, которую я использовал, не работает больше на новых устройствах.

Anyways, @AndroidDev, так как ваша проблема и моя проблема кажутся несколько связанными, я хотел бы знать, удалось ли вам решить ее, и если ответ утвердительный, как это сделать.

Смежные вопросы