2011-01-14 5 views
11

Hallo Ich habe versucht, zusätzliche Daten über PendingIntent zu senden.Senden EXTRA Daten über PendingIntent Problem

Dies ist mein Code

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

In meinem Code es PendingIntent auf zwei Schaltfläche gridview_button mit EXTRA_WIDGET_MODE 2 und listview_button mit EXTRA_WIDGET_MODE 1

, wenn ich auf gridview_button klicken zuweisen und es Update Klasse Ich nenne hat auch EXTRA_WIDGET_MODE Wert ist "1"

Was mache ich falsch?

+1

Sie müssen uns einige weitere Details geben. Was ist genau dein Problem? Haben Sie Fehler? Wenn ja, können Sie den Stacktrace veröffentlichen? –

+1

Entschuldigung für unklare Frage. In Code "gridview_button" haben PendingIntent mit EXTRA Daten "EXTRA_WIDGET_MODE" = "2" wenn ich meinen Code ausführe habe ich auch EXTRA_WIDGET_MODE Wert "1" – SnowBEE

+0

Schreiben Sie bitte Ihre eigene Antwort und akzeptieren Sie diese als Antwort. – mad

Antwort

22

Schließlich fand ich Problem dies geschehen, weil ich das gleiche „requestCode“

PendingIntent.getService(context, appWidgetId 

Es senden ähnliche

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

Auch wenn Sie nur die Paketdaten ändern, funktioniert die Aktion wie 'foo1' und 'foo2' ... ie intent.setAction ("action1"); // da der technische Anfragecode noch nicht vollständig unterstützt wird . – danmayer

3

sollte die richtige Antwort, die ich denke, die Flagge

nutzen würde
FLAG_UPDATE_CURRENT 

Dadurch werden bestehende ausstehende Absichten wiederverwendet, aber ihre zusätzlichen Daten ersetzt.

+2

Ich denke, das war das Problem, nicht die Lösung (ich stieß auf das gleiche Problem). Wenn Sie mehrere pendingIntents benötigen, die sich nur in ExtraData unterscheiden, dann funktioniert FLAG_UPDATE_CURRENT wie folgt: Es überschreibt die vorhandenen pendingIntents. – Bachi

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

Ändern Sie das Flag auf PendingIntent.FLAG_ONE_SHOT.

1

Ich fand, dass wenn die Absicht, die verwendet wurde, um die ausstehende Absicht zu erstellen, irgendwelche Extras bereits darin enthalten hat, die Extras der neuen Absicht ignoriert werden. Zum Beispiel, wenn Sie die Probe in der Android-Dokumentation folgen, wie so einen Widget für den Aufbau

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

Dann wird die Linie

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

Wird Ihre neue Absicht des Extra Ankleben zu verhindern. Ich entfernte diese Linie und meine Sachen arbeiteten

Verwandte Themen