2012-03-22 7 views
7

documentación para Android SMSManagers sendTextMessage función¿Cómo funciona "deliveryIntent" en el marco de Android SMS?

public void sendTextMessage (String destinationAddress, String scAddress, String text,   
PendingIntent sentIntent, PendingIntent deliveryIntent) 

deliveryIntentsi no es NULL esta PendingIntent se emite cuando el mensaje se entrega al destinatario. El pdu sin formato del informe de estado está en los datos ampliados ("pdu")

No pude entender si el servicio de entrega se activa cuando se entregan SMS a destinationAddress o scAddress, y cuál es el significado de "raw pdu del estado" informe está en la información extendida ("pdu") "y cómo obtener ese informe? .

Aprecio tu esfuerzo.

Respuesta

3

Se transmite cuando el mensaje se entrega al destinationAddress.

El PDU se puede extraer de la Intent.getExtras().get("pdu") al ser registrados BroadcastReceiver recibe la emisión Intención se define con PendingIntent.getBroadcast(Context, int requestCode, Intent, int flags). Por ejemplo:

private void sendSMS(String phoneNumber, String message) {  
    String DELIVERED = "DELIVERED"; 

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

    registerReceiver(
     new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       Object pdu = arg1.getExtras().get("pdu"); 
       ... // Do something with pdu 
      } 

     }, 
     new IntentFilter(DELIVERED));   

    SmsManager smsMngr = SmsManager.getDefault(); 
    smsMngr.sendTextMessage(phoneNumber, null, message, null, deliveredPI);    
} 

Luego hay que analizar extraída PDU, SMSLib debería ser capaz de hacer eso.

2

Sólo para construir sobre la respuesta de a.ch, aquí está cómo se puede extraer del informe de entrega de un intento:

public static final SmsMessage[] getMessagesFromIntent(Intent intent) { 
    Object[] messages = (Object[]) intent.getSerializableExtra("pdus"); 
    if (messages == null || messages.length == 0) { 
     return null; 
    } 

    byte[][] pduObjs = new byte[messages.length][]; 

    for (int i = 0, len = messages.length; i < len; i++) { 
     pduObjs[i] = (byte[]) messages[i]; 
    } 

    byte[][] pdus = new byte[pduObjs.length][]; 
    SmsMessage[] msgs = new SmsMessage[pdus.length]; 
    for (int i = 0, count = pdus.length; i < count; i++) { 
     pdus[i] = pduObjs[i]; 
     msgs[i] = SmsMessage.createFromPdu(pdus[i]); 
    } 

    return msgs; 
} 

crédito completo al gran proyecto en: http://code.google.com/p/android-smspopup/

Cuestiones relacionadas