¿Por qué la PendingIntent no devuelve mi costumbre configuración extras para la Intención?

StackOverflow https://stackoverflow.com/questions/3127957

  •  30-09-2019
  •  | 
  •  

Pregunta

Esta pregunta alguna manera se relaciona con la cuestión cuando estaba buscando a obtener los extras de vuelta en startActivityForResult pero ahora se enfrentan a un nuevo desafío.

he suscrito para recibir ProximityAlerts y he construido expresamente la intención de incluir algunos extras. Pero cuando me dieron el servicio de los extras no están allí.

Después de las respuestas aquí es el código de trabajo:

Intent intent = new Intent(this, PlacesProximityHandlerService.class);
intent.setAction("PlacesProximityHandlerService");
intent.putExtra("lat", objPlace.getLat());
intent.putExtra("lon", objPlace.getLon());
intent.putExtra("error_m", objPlace.getError()+ALERT_RANGE_IN_METERS);
PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);
LocationUtils.addProximity(this, objPlace.getLat(), objPlace.getLon(),objPlace.getError()+ALERT_RANGE_IN_METERS, -1, sender);

La documentación dice parámetro PendingIntent to be sent for each location update

¿Fue útil?

Solución

Por alguna razón no especificada, extras será entregado solamente si ha establecido algún tipo de acción, por ejemplo setAction ( "foo"). Lo que se refiere a CommonsWare se aplica sólo en la obtención de los casos PendingIntent, si no lo ha FLAG_ONE_SHOT conjunto. Que puede ser fijado por el argumento requestCode en PendingIntent.get ... métodos de fábrica. Aunque la documentación dice que no es utilizado en la actualidad, lo que realmente toma en cuenta de la hora de distinguir PendingIntents.

En su caso, usted no necesita conjunto nada más que un trozo de cuerda de acción ficticia. LocationManagerService reutiliza el PendingIntent se ha suscrito a las alertas de proximidad, y sólo añade una bandera si el teléfono ha entrado o salido del rango de alarma.

Otros consejos

Si usted tiene múltiples PendingIntents excepcional, es necesario asegurarse de que el Intents subyacente difiere en más de sus extras. De lo contrario, Android mantendrá la reutilización de la primera PendingIntent que creó para su primera Intent, el uso de suplementos de esa primera Intent todo el tiempo.

Por ejemplo, se puede añadir una acción única vía setAction() - que no va a cambiar su Intent enrutamiento (ya que está especificando el componente), pero que hará que su diferente Intents.

he tenido este problema y la solución que encontré fue bastante simple, aunque no puedo explicar por qué funcionó.

En un principio mi intención pendientes veía así:

     notificationIntent = new Intent(ctx, FragmentTabsPager.class);
     notificationIntent.setData(Uri.parse("content://com.sbs.mobile.workorder.WorkOrder/notes/"));
     notificationIntent.putExtra("NOTIFICATION", true);   
     notificationIntent.putExtra(WorkOrder.WorkOrderColumns.WORKORDERID, submessage);

Al crear la intención de esta manera, se pasarían sin extras cuando se hace clic en la notificación, el mapa extras estaría vacía en la actividad receptora. Hice el siguiente cambio en la línea de inicialización del notificationIntent:

     notificationIntent = new Intent().setClass(ctx, FragmentTabsPager.class);

Ahora los extras están ocupados en la actividad receptora. Una vez más, no puedo explicar por qué esto funciona pero fijo mi problema.

Ninguna de las respuestas que funcionó para mí. Configuración de la acción a una cadena específica que funciona por primera vez, pero si se utiliza la misma notificación con distintas extras en un momento posterior, que no funcionaría. He sustituido la cadena para el método setAction con una generada aleatoriamente y funciona sin ningún problema:

intent.setAction(new Random().nextInt(50) + "_action");
  • Si usted piensa que usted puede utilizar la notificación mucho (como para la descarga de archivos diferentes) a continuación, pasar a un mayor número de nextInt()

La clave es establecer los extras y la acción única de la intención antes de llamando

PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);

Si define los extras y la acción en el intento después llamar a lo anterior, no va a funcionar. Esta voluntad no de trabajo:

Intent intent;  
PendingIntent sender=PendingIntent.getService(this, 0,   
   intent=new Intent(this, PlacesProximityHandlerService.class), 0);  

intent.setAction("PlacesProximityHandlerService");  
intent.putExtra("lat", objPlace.getLat());  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top