У меня есть странное поведение, и я могу предположить только из-за ожидающих намерений, которые я использую.Как отменить ожидающие намерения в 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». Итак, я предполагаю, что так или иначе, мне нужно отменить предыдущее намерение, когда изменяется содержимое кнопки виджета. Это проблема? Я делаю что-то неправильно ? Как отменить старое намерение, мне нужно его воссоздать, а затем отменить?
Спасибо за ваше время.
Вы пробовали * pendingIntent.cancel(); * before * views.setOnClickPendingIntent (R.id.btnOne, pendingIntent); *? – Dharmendra