when what pendingintent pending notification intent how example close clicked android android-intent broadcastreceiver android-pendingintent

android - what - how to use pending intent



¿Cómo enviar datos a través de PendingIntent a Broadcast? (2)

Ponga los datos en la intención que está utilizando en la intención pendiente como Extras. Obtendrá esta intención en el Método BroadCast receptor BroadCast . Trate de definir la intención pendiente como se muestra a continuación.

PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent,PendingIntent.FLAG_CANCEL_CURRENT);

Estoy tratando de enviar a través de PendingIntent algunos datos adicionales, como:

MyMessage message; //... Intent intent; SmsManager sms = SmsManager.getDefault(); intent = new Intent(Constants.SENT_PLAIN); intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); //putting long id (not -1L) PendingIntent sentPI = PendingIntent.getBroadcast(activity, 0, intent, 0); intent = new Intent(Constants.DELIVERED_PLAIN); intent.putExtra(Constants.EXTRA_RAW_ID, message.getId()); PendingIntent deliveredPI = PendingIntent.getBroadcast(activity, 0, intent, 0); sms.sendTextMessage(phoneNumber, null, message.getBody(), sentPI, deliveredPI);

Luego en Broadcast intentando capturar datos:

@Override public void onReceive(Context context, Intent intent) { String message, prefix = ""; String action = intent.getAction(); long id = intent.getLongExtra(Constants.EXTRA_RAW_ID, -1L); //here I receive id=-1 // blah-blah.... }

Veo que se onReceive() Broadcast onReceive() , lo que significa que Broadcast registró de manera adecuada, pero aún así los extras están vacíos.

¿Algunas ideas?


como se dijo en la intención pendiente :

Debido a este comportamiento, es importante saber cuándo se considera que dos Intentos son los mismos para los fines de recuperar un PendingIntent. Un error común que cometen las personas es crear múltiples objetos PendingIntent con Intenciones que solo varían en sus contenidos "extra", esperando obtener un PendingIntent diferente cada vez. Esto no sucede. Las partes de la intención que se utilizan para la coincidencia son las mismas definidas por Intent.filterEquals . Si usa dos objetos Intent que son equivalentes según Intent.filterEquals , entonces obtendrá el mismo PendingIntent para ambos.

Hay dos formas típicas de lidiar con esto.

Si realmente necesita múltiples objetos PendingIntent distintos activos al mismo tiempo (por ejemplo, para usarlos como dos notificaciones que se muestran al mismo tiempo), deberá asegurarse de que haya algo diferente en ellos para asociarlos con diferentes. PendingIntents. Estos pueden ser cualquiera de los atributos de Intención considerados por Intent.filterEquals o diferentes enteros de códigos de solicitud suministrados a getActivity(Context, int, Intent, int) , getActivities(Context, int, Intent/[/], int) , getBroadcast(Context, int, Intent, int) o getService(Context, int, Intent, int) .

Si solo necesita un PendingIntent activo a la vez para cualquiera de los Intentos que utilizará, entonces puede usar alternativamente las banderas FLAG_CANCEL_CURRENT o FLAG_UPDATE_CURRENT para cancelar o modificar cualquier PendingIntent actual asociado con el Intent que usted está suministrando.