2012-02-25 8 views
0

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

Сценарий

У меня есть виджет (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». Итак, я предполагаю, что так или иначе, мне нужно отменить предыдущее намерение, когда изменяется содержимое кнопки виджета. Это проблема? Я делаю что-то неправильно ? Как отменить старое намерение, мне нужно его воссоздать, а затем отменить?

Спасибо за ваше время.

+0

Вы пробовали * pendingIntent.cancel(); * before * views.setOnClickPendingIntent (R.id.btnOne, pendingIntent); *? – Dharmendra

ответ

1

Я ты продолжаешь с этой проблемой даже с FLAG_UPDATE_CURRENT, попробуйте определение другого requestCode каждый раз, с чем-то вроде этого:

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

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

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

+0

Это работает! Спасибо, что спасли мое время! – pjanecze