您好我试图通过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 和listview_button与EXTRA_WIDGET_MODE 1
当我点击gridview_button并调用UpdateService类时 我的EXTRA_WIDGET_MODE值也是“1”
我做错了什么?
答案 0 :(得分:22)
最后我发现问题发生了,因为我发送了相同的“requestCode”
PendingIntent.getService(context, appWidgetId
应该是这样的
PendingIntent.getService(context, 0
PendingIntent.getService(context, 1
答案 1 :(得分:7)
PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_ONE_SHOT);
将标记更改为PendingIntent.FLAG_ONE_SHOT
。
答案 2 :(得分:3)
我猜的正确答案是使用旗帜
FLAG_UPDATE_CURRENT
这将重用现有的待处理意图,但会替换其额外数据。
答案 3 :(得分:1)
我发现如果用于创建Pending意图的Intent已经包含任何额外内容,那么将忽略新意图的附加内容。例如,如果您按照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]);
会阻止你的新意图的额外内容。我删除了那行,我的东西工作了