2011-01-14 56 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]); 

會阻止你的新意圖的額外粘連。我刪除了該行和我的東西工作