Android намерения AlarmManager

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

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


person steve    schedule 07.08.2010    source источник


Ответы (2)


Вот как я запланировал обновления для своих виджетов. Каждый из них может быть уникальным, потому что у них есть уникальный номер идентификатора виджета.

Intent widgetUpdate = new Intent();
widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] { appWidgetId });
widgetUpdate.putExtra(EXTRA_POSITION,0);
widgetUpdate.putExtra(EXTRA_URL, URL);
// make this pending intent unique by adding a scheme to it
widgetUpdate.setData(Uri.withAppendedPath(Uri.parse(URI_SCHEME + "://widget/id/"), String.valueOf(appWidgetId)));
PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);
// schedule the updating
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), updateRateSeconds * 1000, newPending);
person smith324    schedule 07.08.2010
comment
И как вы извлекаете данные? - person ; 24.07.2012

Согласно документам, AlarmManager проверяет, являются ли два Intent эквивалентными, используя filterEquals(). Ознакомьтесь с документацией для filterEquals(), чтобы узнать, как он решает, эквивалентны ли два Intent. Кроме того, решение chris324 довольно хорошее.

person Felix    schedule 07.08.2010