Как deliveryIntent работает в рамках Android SMS?

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

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

deliveryIntent если не NULL, этот PendingIntent транслируется, когда сообщение доставляется получателю. Необработанный pdu отчета о состоянии находится в расширенных данных ("pdu")

Я не мог понять, срабатывает ли deliveryIntent при доставке SMS на адрес назначения или scAddress, и что означает «необработанный pdu отчета о состоянии в расширенных данных («pdu»)» и как получить этот отчет? .

Я ценю ваши усилия.


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


Ответы (2)


Он передается, когда сообщение доставляется destinationAddress.

PDU может быть извлечен из Intent.getExtras().get("pdu"), когда зарегистрированный BroadcastReceiver получает широковещательную рассылку Intent, которую вы определили с помощью 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