2011-01-14 10 views
11

Witam Próbuję wysłać dodatkowe dane za pośrednictwem PendingIntent.Wysyłaj dane EXTRA za pośrednictwem problemu PendingIntent.

To jest mój kod

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

W moim kodu to przypisać pendingIntent do dwóch przycisków gridview_button z EXTRA_WIDGET_MODE 2 i listview_button z EXTRA_WIDGET_MODE 1

po kliknięciu na gridview_button i zadzwonić klasa UpdateService I dostałem również EXTRA_WIDGET_MODE wartość "1"

Co robię źle?

+1

Musisz podać nam więcej szczegółów. Jaki jest dokładnie twój problem? Czy masz jakieś błędy? Jeśli tak, czy możesz opublikować stos śledzenia? –

+1

Przepraszam za niejasne pytanie. W kodzie "gridview_button" masz PendingIntent z danymi EXTRA "EXTRA_WIDGET_MODE" = "2", gdy uruchomię swój kod Dostałem również EXTRA_WIDGET_MODE wartość "1" – SnowBEE

+0

Napisz własną odpowiedź, a następnie zaakceptuj ją jako odpowiedź. – mad

Odpowiedz

22

Wreszcie znalazłem problemu to się stało, bo wysłać ten sam „requestCode”

PendingIntent.getService(context, appWidgetId 

To powinno być tak

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

także, jeśli zmieniasz tylko dane pakietu, ustawiasz działanie na coś takiego jak "foo1" i "foo2" działa ... tj. Intent.setAction ("action1"); // ponieważ technicznie kod żądania nie jest jeszcze w pełni obsługiwany . – danmayer

3

Prawidłowa odpowiedź Chyba byłoby użyć flagi

FLAG_UPDATE_CURRENT 

Spowoduje to ponowne użycie istniejących oczekujących zamiarów, ale zastąpienie ich dodatkowymi danymi.

+2

Myślę, że to był problem, a nie rozwiązanie (wpadłem na ten sam problem). Jeśli potrzebujesz wielu oczekujących elementów, które różnią się tylko dodatkowymi danymi, to FLAG_UPDATE_CURRENT robi tak, jak mówi: nadpisuje istniejące oczekujące obiekty. – Bachi

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

Zmień flagę na PendingIntent.FLAG_ONE_SHOT.

1

Znalazłem, że jeśli intencja użyta do utworzenia oczekującej wersji ma już dodatki, to dodatki nowego intencyjnego są ignorowane. Na przykład, jeśli się próbki w Android docs na budowę widget jak tak

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

to linia

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

uniemożliwi dodatki swojego nowego intencyjny w sklejaniu. Usunąłem tę linię i moje prace przepracowały

Powiązane problemy