Android намерен тревожный менеджер - PullRequest
0 голосов
/ 07 августа 2010

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

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

Ответы [ 2 ]

0 голосов
/ 07 августа 2010

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

0 голосов
/ 07 августа 2010

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

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);
...