2011-01-14 15 views
11

Hola, he intentado enviar datos adicionales a través de PendingIntent.Enviar datos EXTRA a través del problema PendingIntent

Este es mi código

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

En mi código que le haga pendingIntent a dos gridview_button botón con EXTRA_WIDGET_MODE 2 y listview_button con EXTRA_WIDGET_MODE 1

cuando hago clic en gridview_button y llamo clase UpdateService I también tiene el valor EXTRA_WIDGET_MODE es "1"

¿Qué estoy haciendo mal?

+1

Necesita darnos más detalles. ¿Cuál es exactamente tu problema? ¿Tienes algún error? Si es así, ¿puedes publicar la stacktrace? –

+1

disculpa por una pregunta poco clara. En el código "gridview_button" tiene PendingIntent con datos EXTRA "EXTRA_WIDGET_MODE" = "2" cuando ejecuto mi código, también obtuve EXTRA_WIDGET_MODE valor "1" – SnowBEE

+0

Escriba su propia respuesta por favor y luego acéptela como respuesta. – mad

Respuesta

22

fin he encontrado un problema que esto suceda porque enviar el mismo "requestCode"

PendingIntent.getService(context, appWidgetId 

Debe ser así

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

también si solo está cambiando los datos del paquete, establecer la acción en algo como 'foo1' y 'foo2' funciona ... es decir, intent.setAction ("action1"); // ya que el código de solicitud técnica aún no es totalmente compatible . – danmayer

3

La respuesta correcta supongo sería usar la bandera

FLAG_UPDATE_CURRENT 

Esto reutilizará los intentos pendientes existentes pero reemplazará sus datos adicionales.

+2

Supongo que este era el problema, no la solución (me encontré con el mismo problema). Si necesita varios pendientes pendientes que difieren solo en ExtraData, entonces FLAG_UPDATE_CURRENT hace lo que dice: sobrescribe los pendientes pendientes. – Bachi

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

Cambia la bandera a PendingIntent.FLAG_ONE_SHOT.

1

Encontré que si la intención que se usó para crear la intención pendiente ya tiene extras, entonces los extras del nuevo intento se ignoran. Por ejemplo, si se sigue la muestra en los documentos de Android para la construcción de un widget al igual que

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

Entonces la línea

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

Deshabilitará extras de su nuevo intento se peguen. Quité esa línea y mis cosas funcionaron

Cuestiones relacionadas