“deliveryIntent”如何在Android SMS框架中工作?

问题描述:

为SMSManagers sendTextMessage功能“deliveryIntent”如何在Android SMS框架中工作?

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

deliveryIntent Android文档如果不为null这是的PendingIntent广播时,将消息传递给收件人。状态报告的原始PDU是在扩展数据(“PDU”)

时SMS传送到目的地地址或scAddress,什么是“的地位原始PDU的含义,如果deliveryIntent被激发我无法理解报告在扩展数据(“pdu”)中,以及如何获得该报告? 。

我很感谢你的努力。

消息发送到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应该可以做到这一点。

只是建立在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/