Я пишу Android AppWidget, который нужно часто обновлять (да, я знаю, не должен этого делать, что бы...). Я бы хотел, чтобы он обновлялся, только если он виден, но досадно, похоже, ничего похожего на WallpaperService.Engine.onVisibilityChanged(boolean visible)
.
Предлагаемый подход здесь - настроить будильник с 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
регистрирует сообщение каждый раз, когда он запускается с помощью будильника. Сообщение журнала появляется даже тогда, когда устройство должно спать, но это то, что, как я думал, не должно было случиться. Где моя ошибка?
Возможно, какое-то другое приложение, которое у вас есть, это пробуждение устройства, и ваша тревога запускается с ним. Если вы используете AlarmManager.RTC
это означает: "выполнить, если устройство бодрствует или ждать, пока оно не проснется, а затем выполните". Проверьте logcat, чтобы узнать, что происходит, и используйте эту команду, чтобы узнать, какие другие тревоги зарегистрированы:
adb shell dumpsys alarm