2012-03-22 21 views
7

爲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」)中,以及如何獲得該報告? 。

我很感謝你的努力。

回答

3

消息發送到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

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