Как отменить ожидающие намерения в виджете Android? - PullRequest
0 голосов
/ 25 февраля 2012

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

Сценарий

У меня есть виджет (4x1), который имеет 4 кнопки. В onUpdate виджета я добавляю ожидающее намерение для каждой кнопки. Мое намерение запускает Сервис с параметром, состоящим из нескольких частей, и в зависимости от этого параметра запускает что-то. Я прилагаю намерения как это:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);

Bundle b = new Bundle();
b.putString("myVariable", someVariable);

Intent intent = new Intent(context, AppStarterService.class);
intent.putExtras(b);

PendingIntent pendingIntent = PendingIntent.getService(context, buttopnPosition, intent, 0);
views.setOnClickPendingIntent(R.id.btnOne, pendingIntent);

Проблема

Код работает просто отлично, пока пользователь не решит обновить содержимое кнопки. Затем выполняется новое ожидающее намерение. Поэтому, когда я снова нажимаю кнопку, иногда она выполняет старые намерения, а не новые. Я не знаю, как объяснить это лучше. Скажем, для моего первого намерения параметр «TestOne», после моего обновления новое намерение имеет параметр «TestX». Когда пользователь нажимает на кнопку, на моем сервисе я получаю дополнительные намерения по-прежнему «TestOne» вместо «TestX». Итак, я предполагаю, что каким-то образом мне нужно отменить предыдущее намерение, когда содержимое кнопки виджета изменится. Это проблема? Я делаю что-то неправильно ? Как мне отменить старые намерения, мне нужно восстановить их, а затем отменить?

Спасибо, что уделили время.

Ответы [ 2 ]

1 голос
/ 17 марта 2012

Если у вас продолжает возникать эта проблема даже с FLAG_UPDATE_CURRENT, попробуйте каждый раз определять requestCode , например:

private static int request = 0;
...
PendingIntent pendingIntent = PendingIntent.getService(context, request++, intent, 0);

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

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

0 голосов
/ 25 февраля 2012

Я думаю, вы хотите установить флаг http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT в качестве последнего параметра PendingIntent.getService

...