通过PendingIntent问题发送EXTRA数据

嗨,我试图通过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分配给带有EXTRA_WIDGET_MODE 2的两个按钮gridview_button和带有EXTRA_WIDGET_MODE 1的listview_button

当我点击gridview_button并调用UpdateService类时我也得到EXTRA_WIDGET_MODE值为“1”

我做错了什么?

最后我发现问题发生了,因为我发送了相同的“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 

这将重用现有的挂起意图,但替换其额外数据。

我发现,如果用于创建Pending intent的Intent已经包含任何额外内容,那么将忽略新intent的附加内容。 例如,如果您按照Android文档中的示例来构建类似的Widget

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

会阻止你的新意图的额外内容。 我删除了那一行,我的东西工作了