Отправить EXTRA данные через PendingIntent

Привет, я пытаюсь отправить дополнительные данные через PendingIntent.

Это мой код

//**1** Intent intent = new Intent(context, UpdateService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(BaseConfigurationActivity.EXTRA_WIDGET_MODE, 2); // put appWidgetId here or intent will replace an intent of another widget PendingIntent pendingIntent = PendingIntent.getService(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.gridview_button, pendingIntent); //**2** intent = new Intent(context, UpdateService.class); intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); intent.putExtra(BaseConfigurationActivity.EXTRA_WIDGET_MODE, 1); // put appWidgetId here or intent will replace an intent of another widget pendingIntent = PendingIntent.getService(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.listview_button, pendingIntent); 

В моем коде он назначает pendingIntent двум кнопкам gridview_button с EXTRA_WIDGET_MODE 2 и listview_button с EXTRA_WIDGET_MODE 1

Когда я нажимаю на gridview_button, и он вызывает класс UpdateService, я также получил значение EXTRA_WIDGET_MODE «1»,

Что я делаю неправильно?

Solutions Collecting From Web of "Отправить EXTRA данные через PendingIntent"

Наконец, я обнаружил, что проблема возникает, потому что я отправляю тот же «requestCode»,

 PendingIntent.getService(context, appWidgetId 

Это должно быть так

 PendingIntent.getService(context, 0 PendingIntent.getService(context, 1 
 PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

Измените флаг на PendingIntent.FLAG_ONE_SHOT .

Правильный ответ, я думаю, будет использовать флаг

 FLAG_UPDATE_CURRENT 

Это приведет к повторному использованию существующих ожидающих намерений, но заменит их дополнительные данные.

Я обнаружил, что если намерение, которое использовалось для создания ожидающего намерения, имеет какие-либо дополнительные функции, которые уже присутствуют в нем, тогда дополнительные действия нового намерения игнорируются. Например, если вы следуете образцу в документах Android для создания такого виджета

 Intent toastIntent = new Intent(context, StackWidgetProvider.class); toastIntent.setAction(StackWidgetProvider.TOAST_ACTION); toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent, PendingIntent.FLAG_UPDATE_CURRENT); rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent); 

Тогда линия

 toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 

Это предотвратит приклеивание ваших новых намерений. Я удалил эту линию, и мои вещи работали