2011-01-14 23 views
11

Ciao Sto provato a inviare i dati aggiuntivi tramite PendingIntent.Invia dati aggiuntivi tramite PendingIntent problema

Questo è il mio codice

//**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); 

Nel mio codice è assegnare pendingIntent pulsante due gridview_button con EXTRA_WIDGET_MODE 2 e listview_button con EXTRA_WIDGET_MODE 1

quando clicco su gridview_button e chiamo classe UpdateService I inoltre ha ottenuto il valore EXTRA_WIDGET_MODE è "1"

quello che sto facendo di sbagliato?

+1

È necessario darci qualche dettaglio in più. Qual è esattamente il tuo problema? Hai errori? In tal caso, puoi pubblicare lo stacktrace? –

+1

scusa per la domanda non chiara. In codice "gridview_button" hanno PendingIntent con i dati extra "EXTRA_WIDGET_MODE" = "2" quando corro il mio codice ho anche avuto valore EXTRA_WIDGET_MODE "1" – SnowBEE

+0

Scrivi la tua risposta per favore e poi accettarla come la risposta. – mad

risposta

22

finalmente ho trovato problema che questo accada perché io mando lo stesso "requestCode"

PendingIntent.getService(context, appWidgetId 

dovrebbe essere come questo

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

anche se stai semplicemente cambiando i dati del bundle, impostando l'azione su qualcosa come "foo1" e "foo2" funziona ... cioè intent.setAction ("action1"); // poiché tecnicamente il codice di richiesta non è ancora completamente supportato . – danmayer

3

La risposta corretta Credo che sarebbe utilizzare il flag

FLAG_UPDATE_CURRENT 

Ciò riutilizzare intenti in attesa esistenti, ma sostituire i loro dati aggiuntivi.

+2

Immagino che questo fosse il problema, non la soluzione (mi sono imbattuto nello stesso problema). Se hai bisogno di più elementi in attesa che differiscono solo su ExtraData, allora FLAG_UPDATE_CURRENT fa come dice: sovrascrive gli oggetti in sospeso esistenti. – Bachi

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

Modificare flag in PendingIntent.FLAG_ONE_SHOT.

1

ho scoperto che se l'intento che è stato utilizzato per creare l'intento attesa ha qualche extra già allora extra del nuovo intento vengono ignorati. Ad esempio, se si segue l'esempio nella documentazione di Android per la costruzione di un widget in questo modo

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); 

Poi la linea

toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]); 

Impedisce extra del vostro nuovo intenti si attacchino. Ho tolto quella linea e la mia roba lavorato