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únIntent.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 agetActivity(Context, int, Intent, int)
,getActivities(Context, int, Intent/[/], int)
,getBroadcast(Context, int, Intent, int)
ogetService(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
oFLAG_UPDATE_CURRENT
para cancelar o modificar cualquier PendingIntent actual asociado con el Intent que usted está suministrando.