Я пишу приложение для Android, в котором пользователь может выбрать несколько акций для просмотра и получать предупреждения, если согласованное предопределенное условие предупреждения. Данные запаса сохраняются в 5 объектах пользовательского Parcelable класса «alert» (один объект на акцию и условие). Периодическое обновление данных выполняется через службу, запущенную AlarmManager. Объекты оповещения передаются службе, помещая их в Intent, который помещается в PendingIntent AlarmManager.Как обновить отправку данных службе, используя намерение, когда служба запускается диспетчером аварийных сигналов?
Intent intent = new Intent(this, UpdateService.class);
Bundle b = new Bundle();
saveAlertsToBundle(b);
intent.putExtras(b);
intent.setData(Uri.parse("updateManager"));
PendingIntent pendIntent = PendingIntent.getService(this,0,intent,0);
// 1min intervall
long intervall = DateUtils.MINUTE_IN_MILLIS * 1;
// time of first start
long firstStartDelay = DateUtils.SECOND_IN_MILLIS * 30;
long firstStart = System.currentTimeMillis() + firstStartDelay;
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// kill running
am.cancel(pendIntent);
//start new
am.setRepeating(AlarmManager.RTC_WAKEUP,firstStart,intervall,pendIntent);
Моя проблема:
При запуске службы в первый раз, когда есть только один объект тревоги передается в службу все нормально работает. Как только существует больше объектов оповещения, они также должны быть переданы службе, но это не работает с приведенным выше кодом. Служба не получает обновленные намерения с дополнительными объектами оповещения, но только исходные, содержащие только один объект оповещения. Приведенный выше код правильно создает намерение, содержащее дополнительный объект оповещения, но они никогда не доходят до службы.
Так что мой вопрос в том, как передать обновленное намерение уже запущенному AlarmManager.
Я уже пробовал остановить AlarmManager (строка в // kill running comment) и перезапустить его, но это не сработает. Возможно, из-за намерения не содержать те же объекты предупреждений, что и в момент его создания? Я попытался исправить это, установив uri в части данных намерения, но это также не помогло.
Спасибо за помощь.
Благодарим за помощь, это решило проблему, но создало новую. Дополнительные объекты предупреждений передаются службе, но в качестве дополнительных служб, управляемых AlarmManager, уже запущенные AlarmManagers продолжают работать. Поэтому количество диспетчеров AlarmManager увеличивается каждый раз, когда я добавляю объект предупреждения. Это означает, что у меня есть один запуск для одного объекта оповещения, один на двоих, один на три и т. Д. Я думаю, было бы лучше, если бы существовал только тот, у кого было текущее количество существующих предупреждений, поэтому мне все равно нужно остановить старый AlarmManager. Службы останавливаются вызовом stopSelf(). – user1695117
ОК. Я не был уверен, что вы хотели сделать. На основе этого комментария звучит так, будто вы хотите отменить существующий сигнал тревоги и создать новый с новыми параметрами. Я отредактирую свой ответ для этого. –
Это сработало отлично. Кажется, все, что я отсутствовал, было правильным флагом. Спасибо за помощь. – user1695117