Я пишу Android AppWidget, который нужно часто обновлять (да, я знаю, не должен этого делать, что бы ...). Я бы хотел, чтобы он обновлялся, только если он виден, но раздражающе кажется, что ничего не похоже на WallpaperService.Engine.onVisibilityChanged(boolean visible)
.Тревога срабатывает на «спящем» устройстве Android
Предлагаемый подход заключается в настройке аварийного сигнала с AlarmManager.setRepeating(AlarmManager.RTC, firstShot, interval, pendingIntent)
, который запускает обновление каждые interval
миллисекунд. Это, по крайней мере, не разбудит устройство, когда оно спит.
Это именно то, что я сделал. Моя PendingIntent
выглядит следующим образом:
final Intent intent = new Intent(context, CountdownWidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
CountdownWidgetService
регистрирует сообщение каждый раз, когда он запускается по тревоге. Сообщение журнала появляется даже тогда, когда устройство должно спать - но это то, что, как я думал, не должно было случиться. Где моя ошибка?
@Oderik Вы, наверное, хотел бы добавить это как комментарий, а не как редактировать на мой пост. Добавьте его ниже, если хотите: РЕДАКТИРОВАТЬ: Терпение было ключевым: устройству нужно некоторое время, чтобы фактически заснуть после того, как экран погаснет (и АБР отключен). После этого будильник не срабатывает. Спасибо за совет, который приведет к правильному расследованию. Видя, как часто устройство просыпается, мне напоминают свежие родители. ;) –
Нет, я действительно хотел отредактировать ответ, потому что он еще не включил решение: Android занимает некоторое время, прежде чем отправиться спать. Но я думаю, что другие тоже найдут это в комментариях. Еще раз спасибо! – Oderik
Он появился как редактирование моего ответа. Кстати, причина, по которой «требуется некоторое время», чтобы заснуть, заключается в том, что в каком-то приложении есть блокировка следа. Android по умолчанию переходит в спящий режим, как только экран выключен. Приложения могут запрашивать у него бодрствование, пока они не закончат обработку, и т. Д. Http://developer.android.com/reference/android/os/PowerManager.WakeLock.html –