通过PendingIntent发送额外数据的问题

11

嗨,我试图通过 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和listview_button,分别使用EXTRA_WIDGET_MODE 2和EXTRA_WIDGET_MODE 1。

当我点击gridview_button时,它会调用UpdateService类,但我得到的EXTRA_WIDGET_MODE的值是“1”。

我做错了什么?


1
你需要给我们更多的细节。你的问题是什么?你有任何错误吗?如果有,你能发布堆栈跟踪吗? - Valentin Rocher
1
抱歉问题不够清晰。在代码中,“gridview_button”具有带有额外数据“EXTRA_WIDGET_MODE”=“2”的PendingIntent,当我运行我的代码时,我也得到了EXTRA_WIDGET_MODE值“1”。 - SnowBEE
请自行编写答案,然后接受它作为答案。 - mad
4个回答

24

最后我发现问题出在我发送了相同的“requestCode”。

PendingIntent.getService(context, appWidgetId 

应该像这样

PendingIntent.getService(context, 0 
PendingIntent.getService(context, 1 

2
如果你只是更改bundle数据,将操作设置为类似于'foo1'和'foo2'的内容也可以起作用...即intent.setAction("action1");//因为从技术上讲,请求代码尚未完全支持。 - danmayer

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

将标志更改为PendingIntent.FLAG_ONE_SHOT


3
我猜正确答案应该是使用标志(flag)。
FLAG_UPDATE_CURRENT

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

2
我猜这就是问题所在,而不是解决方案(我也遇到了同样的问题)。如果您需要多个仅在ExtraData上有所不同的pendingIntents,则FLAG_UPDATE_CURRENT会按照其字面意思执行:它会覆盖现有的pendingIntents。 - Bachi

1
我发现,如果用于创建Pending intent的Intent已经有任何额外信息,则新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]);

防止新意图的额外信息粘在一起。我删除了那行代码,我的东西就可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接