通过PendingIntent问题发送EXTRA数据

时间:2011-01-14 07:59:42

标签: android

您好我试图通过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”

我做错了什么?

4 个答案:

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

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