2012-03-22 10 views
7

Android dokumentacji SMSManagers sendTextMessage funkcyjnychJak działa "deliveryIntent" w systemie operacyjnym Android SMS?

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

deliveryIntentjeśli not null to PendingIntent jest nadawane, gdy wiadomość zostanie dostarczona do odbiorcy. Surowy kod stanu raportu o stanie znajduje się w rozszerzonych danych ("pdu")

Nie można zrozumieć, czy deliveryIntent jest uruchamiany, gdy SMS jest dostarczany do adresu docelowego lub scAddress i jakie jest znaczenie "raw pdu o statusie" raport znajduje się w rozszerzonych danych ("pdu") "i jak uzyskać ten raport? .

Doceniam twój wysiłek.

Odpowiedz

3

Jest nadawany, gdy wiadomość zostanie dostarczona do destinationAddress.

Urządzenie PDU może zostać wyodrębnione z Intent.getExtras().get("pdu") po zarejestrowaniu się pod numerem BroadcastReceiver, w którym transmisja Intent została zdefiniowana za pomocą PendingIntent.getBroadcast(Context, int requestCode, Intent, int flags). Na przykład:

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);    
} 

Następnie trzeba zanalizować ekstrakcji PDU, SMSLib powinien być w stanie to zrobić.

2

Wystarczy zbudować na odpowiedź a.ch, w herezje, jak można wyodrębnić raportu doręczenia z zamiarem:

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; 
} 

pełny kredyt wielkiego projektu w: http://code.google.com/p/android-smspopup/

Powiązane problemy