2011-01-14 52 views
11

嗨我试图通过PendingIntent发送额外的数据。通过PendingIntent发送EXTRA数据问题

这是我的代码

//**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”

我做错了什么?

+1

您需要给我们一些更多的细节。什么是你的问题?你有什么错误吗?如果是这样,你可以发布stacktrace吗? – 2011-01-14 08:16:29

+1

对不清楚的问题感到抱歉。在代码“gridview_button”的PendingIntent中,EXTRA数据“EXTRA_WIDGET_MODE”=“2”当我运行我的代码时,我也得到了EXTRA_WIDGET_MODE的值“1” – SnowBEE 2011-01-14 10:03:48

+0

请写下你自己的答案,然后接受它作为答案。 – mad 2011-02-09 11:48:44

回答

22

最后我发现问题,这种情况发生,因为我发送相同的“requestCode”

PendingIntent.getService(context, appWidgetId 

它应该是这样的

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

正确的答案,我的猜测是使用标志

FLAG_UPDATE_CURRENT 

这将重用现有的未决意图,但替换它们的额外数据。

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

更改标记为PendingIntent.FLAG_ONE_SHOT

1

我发现,如果用于创建待定意图的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]); 

会阻止你的新意图的额外粘连。我删除了该行和我的东西工作