2014-07-06 4 views
0

В моем приложении пользователь установил несколько напоминаний, и я должен предупредить их, когда придет время. В настоящее время я использую AlarmManager.RTC как тип AlarmManagerAndroid: Огонь всех пропущенных сигналов при включении устройства

am.set(AlarmManager.RTC_WAKEUP, date.getTimeInMillis(), pendingIntent); 

его в работе в соответствии с инструкцией

// Установка будильника - обратите внимание этот сигнал будет потерян, если включен телефон
// off and on

Есть ли способ, которым я могу упускать пропущенные тревоги при включении устройства?

Обратите внимание, что я не хочу пробуждать устройство, я просто хотел напомнить им, когда они включили устройство.

PS: Я прочитал документацию http://developer.android.com/reference/android/app/AlarmManager.html#RTC, но я не нашел свой вариант.

ответ

4

Есть ли способ, которым я могу упускать пропущенные тревоги при включении устройства?

Шаг № 1: У вас есть какой-то способ отслеживания, что вы пропустили, например, отслеживая статус события в базе данных.

Шаг №2: Установите BOOT_COMPLETEDBroadcastReceiver, чтобы узнать, когда телефон перезагружен. Там планируйте любые аварийные сигналы, которые все еще находятся в будущем, и решайте, что делать с сигналами тревоги, которые произошли в прошлом, но были упущены (например, поднять , указав пропущенные события).

+0

Я также ищу решение, когда приложение обновляется через игру, все тревоги потеряны в это время. Поэтому сначала вы можете установить новый сигнал тревоги, если приложение запускается пользователем. Но это может быть поздно. Мой вопрос в том, как решить эту проблему? – drindt

+0

@drindt: «все тревоги потеряны в это время» - я не знал, что это произошло. Я думаю, вы можете посмотреть 'ACTION_PACKAGE_REPLACED', чтобы узнать, что вы обновлены, и снова настройте свой будильник. – CommonsWare

+0

Благодарим вас за ответ. Я нашел это: https://code.google.com/p/android/issues/detail?id=61850 Но я не пробовал это. – drindt

4

Вам нужно будет сделать это вручную.

Один из способов сделать это было бы прослушивать событие телефон выключения:

<action android:name="android.intent.action.ACTION_SHUTDOWN" /> 

и до того, как устройство отключается, за исключением времени выключения.

Тогда слушайте устройство загрузки:

<action android:name="android.intent.action.BOOT_COMPLETED" /> 

и написать свою собственную логику, которая определяет, какие тревоги выстрелила бы в течение этого времени простоя, и сразу запустить эти сигналы с AlarmManager.

+0

так с 'android.permission.RECEIVE_BOOT_COMPLETED' мое приложение автоматически запускается при загрузке? – zzlalani

+0

Нет, это просто позволяет вашему приложению слушать, когда устройство загружается. Затем вы можете настроить широковещательный приемник, а в onReceive() вы можете поместить свою логику для того, что вы хотите, когда устройство загрузится. – JDJ

+0

Thankyou очень много. этот подход работает – zzlalani

1

AlarmManager предупредит все ваши сигналы тревоги, пока ваш телефон не включится.

Зарегистрированные сигналы сохраняются в то время как устройство спит (и может необязательно разбудить устройство, если они уходят в это время), но будет очищен, если он выключен и перезагружен.

Теперь, когда единственный способ подходит к кепп-трекам через базу данных. Поместить дополнительный класс, который распространяется BroadcastReceiver. Где в своем методе OnReceive() вы можете повторно генерировать свои аварийные сигналы при перезагрузке устройства. (очевидно, если у вас есть трек, то есть база данных). Настройка BroadcastReceiver для вашей цели можно посмотреть здесь How to start an Application on startup?. Надеюсь, это поможет.