Как «deliveryIntent» работает в Android SMS Framework? - PullRequest
8 голосов
/ 22 марта 2012

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 07 мая 2012

Он передается при доставке сообщения на 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 сможет это сделать.

2 голосов
/ 10 мая 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/

...