Как сохранить запланированный сигнал тревоги после того, как приложение было убито Android или убийцей задач?
Код, который планирует тревогу.
PendingIntent sender = PendingIntent.getBroadcast(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, time, sender);
Он работает нормально, но когда я убиваю свое приложение в Task Убийце, я потерял свой запланированный сигнал тревоги. Как решить эту проблему?
2 ответа
Попросите ваше приложение передать сообщение, так как оно будет уничтожено, а когда оно будет передано, тогда прослушайте, если служба все еще работает... если она не запущена. Это обеспечит работу вашего сервиса, даже если приложение убито.
Обновить
Я постараюсь создать блок-схему для вас
Метод onDestroy() является частью службы.
Надеюсь, это поможет.
ОБНОВЛЕНИЕ 2
Одна вещь, которую я забыл упомянуть, это то, что в идеале вы хотите, чтобы запускался только один экземпляр службы. Так что просто посмотрите на идентификатор, который присутствует в onStart(), должно быть от == до 1, чтобы запустить его еще.. игнорируйте его.
Методы уведомления о классе обслуживания:
onStart(): этот метод вызывается при запуске службы
onDestroy(): это метод, который вызывается при уничтожении службы
Методы уведомления класса BroadcastReciever:
onReceive (): этот метод получает все намерения, отправленные ему (если не отфильтровано)
Посмотрите примеры на BroadcastRecievers (передача сообщений) и службы (запуск службы)
Рекомендации:
http://developer.android.com/reference/android/content/BroadcastReceiver.html
http://developer.android.com/reference/android/app/Service.html
Аварийный сигнал, установленный диспетчером аварийных сигналов, не прерывается при закрытии приложения, однако, когда происходит перезагрузка, все аварийные сигналы очищаются операционной системой, поскольку постоянство отсутствует. Так что вам нужно сделать настойчивость.
- Каждый раз при настройке будильника сохраняйте время будильника.
- Зарегистрируйте получателя для завершения загрузки.
Установите будильник снова при перезагрузке.
public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //re register the alarm } }
manifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
.......
<receiver
android:name="BootReceiver"
android:enabled="true"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Вы можете использовать SharedPreference, чтобы сэкономить время (время, когда должен быть активирован сигнал тревоги, или время, когда он должен быть активирован в следующий раз).
Используйте это, чтобы установить новый сигнал тревоги на загрузочном приемнике.