2012-03-14 15 views
8

Estoy tratando de enviar mensajes SMS desde una aplicación de Android. Estoy usando PendingIntent para poder usar un Broadcast Receiver para verificar si se envió correctamente. Como la llamada a sendTextMessage se realizará por SMS, necesito enviar algunos datos "adicionales" para identificar el SMS real, de modo que mi recepción de difusión pueda hacer algún trabajo en un mensaje de texto específico.Android PendingIntent Extra

Aquí está mi código de envío:

 String SENT = "SMS_SENT"; 

     Intent sentIntent = new Intent(SENT); 
     sentIntent.putExtra("foo", "BAR"); 
     PendingIntent sentPI = PendingIntent.getBroadcast(baseContext, 0, 
      sentIntent, 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(baseContext, 0, 
      new Intent(DELIVERED), 0); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(smsMessage.getNumber(), null, smsMessage.getText(), sentPI, deliveredPI); 

El problema es que en mi receptor de radiodifusión, que parece que no puede leer mi Adicional "foo":

public class SMSSentBroadcastReceiver extends BroadcastReceiver { 

    @Override 
     public void onReceive(Context arg0, Intent intent) { 
     String smsID = intent.getStringExtra("foo"); 
     ...... 
     } 
    } 

SMSID sólo se convierte en nula .

Mi receptor de radiodifusión se ha registrado este modo:

baseContext.registerReceiver(new SMSSentBroadcastReceiver(), new IntentFilter("SMS_SENT")); 

Teniendo en cuenta que el filtro intención está trabajando, ¿qué estoy haciendo mal? ¿Por qué no se envían los extras también?

Cualquier ayuda es apreciada. Gracias

+0

En su PendingIntent.getBroadcast, si pasa algún código de solicitud único, ¿el smsID sigue siendo nulo? (por ejemplo, 'PendingIntent.getBroadcast (baseContext, 99, sentIntent, 0)') – dule

+0

¡Excelente! Eso funciono. Si lo pones como respuesta, lo aceptaré :) Sin embargo, ¿por qué necesitas un código de solicitud único? Antes, solo lo estaba poniendo a 0, lo que no parecía funcionar. – jtnire

Respuesta

14

Lo que sospecho que ha sucedido (al menos, me ha pasado), es que estás usando el intento SMS_SENT en otro lugar antes, por lo que en ese momento, ese intento no tiene "foo" en los extras . Llamar a PendingIntent.getBroadcast con el mismo intento y el código de solicitud le devolverá el intento pendiente original.

Si su intención es la misma intención, debe usar algo como un PendingIntent.FLAG_UPDATE_CURRENT para actualizar la intención con los nuevos extras. Si no se supone que es el mismo intento, debe tener un código de solicitud diferente, de modo que no coincida con el otro intento (que es la razón por la cual se trabajó con un único código de solicitud).

+0

Estoy 100% seguro de que foo siempre se estableció como un extra. Pero puedo confirmar que el "mismo" intento pendiente se llamó dos veces cuando intentaban enviarse 2 mensajes SMS. Creo que esto realmente puede ser un error en el SDK ... – jtnire

+0

No estoy seguro de por qué el extra no siempre estaría allí (para mí, estaba allí, pero era incorrecto, es decir, estaba rancio). No estoy al tanto de ningún error que pueda causar esto, normalmente asumo que es algo que me falta algo más que algo malo con el SDK :) – dule

+0

@dule, ¡eres increíble! este problema me ha torturado durante varias horas hasta que encontré tu respuesta. – neevek

Cuestiones relacionadas