Как работи deliveryIntent в Android SMS framework?

Документация за Android за функцията sendTextMessage на SMSManagers

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

deliveryIntent ако не е NULL, това PendingIntent се излъчва, когато съобщението бъде доставено на получателя. Необработеният pdu на отчета за състоянието е в разширените данни („pdu“)

Не можах да разбера дали deliveryIntent се задейства, когато SMS се достави до destinationAddress или scAddress и какво е значението на „суровия pdu на отчета за състоянието е в разширените данни („pdu“)“ и как да получа този отчет? .

Оценявам усилията ви.


person Gaurav Agarwal    schedule 22.03.2012    source източник


Отговори (2)


Излъчва се, когато съобщението е доставено на destinationAddress.

PDU може да бъде извлечен от Intent.getExtras().get("pdu"), когато регистрираният BroadcastReceiver получи излъчването на намерение, което дефинирате с PendingIntent.getBroadcast(Context, int requestCode, Intent, int flags). Например:

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

След това трябва да анализирате извлечения PDU, SMSLib трябва да може да направи това.

person a.ch.    schedule 07.05.2012

Само за да надградим отговора на a.ch, ето как можете да извлечете отчета за доставка от намерение:

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

Пълна заслуга за страхотния проект на: http://code.google.com/p/android-smspopup/

person DanielGrech    schedule 09.05.2012