Подтвердить что ты не робот

Как сохранить запланированную тревогу после того, как приложение было убито 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);

Его работа прекрасна, но когда я убиваю свое приложение в убийце задачи, я потерял запланированную тревогу. Как решить эту проблему?

4b9b3361

Ответ 1

чтобы ваше приложение транслировало сообщение, когда оно было убито, а когда это сообщение транслируется, попросите прослушиватель проверить, продолжает ли служба, если она не запускается. Это гарантирует, что ваша служба будет запущена, даже если приложение будет убито.

Обновление

Я попытаюсь создать схему последовательности действий для вас

Death/Restart of a service

Метод onDestroy() является частью службы.

Надеюсь, это поможет.

ОБНОВЛЕНИЕ 2

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

Способы уведомления класса обслуживания:

onStart(): этот метод вызывается, когда служба запускается

onDestroy(): Это метод, который вызывается при убийстве службы

Методы уведомления класса BroadcastReciever:

onReceive(): Эти методы получают все намерения, которые отправляются ему (если не фильтруются)

Посмотрите примеры на BroadcastRecievers (Message Broadcasting) и Service (Запуск службы)

Литература:

http://developer.android.com/reference/android/content/BroadcastReceiver.html

http://developer.android.com/reference/android/app/Service.html

Ответ 2

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

  • Каждое время при настройке будильника сохраняют время будильника.
  • Зарегистрировать приемник для завершения загрузки.
  • Повторно установите будильник при перезагрузке.

    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, чтобы сэкономить время (время срабатывания будильника или время, когда оно должно быть запущено дальше)

Используйте это, чтобы установить новый сигнал тревоги в загрузочном приемнике.