2014-11-05 3 views
0

Довольно новый для Android, так что простите меня, если это глупый вопрос ...Получения истекшего времени от AlarmManager

Итак, я делаю приложение с таймером обратного отсчета, который будет периодически звонить, а затем еще раз, когда обратный отсчет достигает нуля - достаточно простой. Тем не менее, я хочу, чтобы приложение продолжало работать, даже когда пользователь закрывает приложение, или телефон спит, так что всякий раз, когда будет звонить таймер, приложение будет просыпаться и отображать активность, показывающую время до окончания обратного отсчета. Для этого мне нужно будет использовать сервис, и вот, разработчики google сделали сервис AlarmManager только для меня! Милая!

Однако, я заметил 2 вещи:

1) класс AlarmManager не имеет конструктор не по умолчанию, так что я предполагаю, что я не могу просто расширить и лавировать некоторую логику, так что я могу получить все это сделано одним выстрелом. Хорошо, круто - я просто сделаю сервис, который запускает AlarmManager в начале и реализует мою логику.

2) В документации я не вижу никакого способа получать либо прошедшее время, либо оставшееся время от AlarmManager после его запуска.

Итак, мой вопрос: означает ли это, что мне понадобятся два таймера, которые я запускаю в одно и то же время? Скажем, AlarmManager, чтобы разбудить телефон и вызвать активность, и CountDownTimer, содержащиеся в сервисе, для сохранения оставшегося времени и вызова звукового сигнала тревоги?

Спасибо, что помогли мне в моей бессонной заднице.

ответ

0

Вы можете расширить AlarmManager. Однако общий способ - получить его экземпляр, который работает как системная служба.

Получите экземпляр, используя Context.getSystemService(Context.ALARM_SERVICE), и вы сможете зарегистрировать свой PendingIntent к этому системному сервису, который не зависит от вашего собственного приложения. PendingIntent может либо начать свою деятельность, либо отправить широковещательную рассылку с Intent. Вы не контролируете истекшее время постоянно в AlarmManager. Скорее, вы вычисляете разницу во времени между текущим временем вызова метода и желаемым временем для запуска вашего события. И затем вы устанавливаете сигнал тревоги в AlarmManager с PendingIntent, представляющим действие, которое вы хотите предпринять в этот интервал, или время.

С другой стороны, если вы хотите максимальной гибкости, запустите свой сервис как услугу переднего плана и прослушайте системную трансляцию, например, ACTION_TIME_TICK, которая запускается каждую минуту. В качестве альтернативы, если вы не запускаете службу на переднем плане, вы также можете запустить свою службу с помощью START_STICKY, что гарантирует, что ваша служба будет перезапущена после того, как система ее убьет (из-за сна или закрытия приложения). Подумайте об этом как о фоновой службе, которая постоянно работает. Это обеспечивает вам большую гибкость в вашей реализации.

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