2011-08-15 32 views
5

所以這是我BroadcastReceiver如何從BroadcastReceiver發送短信並檢查其狀態?

public class IncomingSMSListener extends BroadcastReceiver { 
private static final String SMS_EXTRA_NAME = "pdus"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SmsMessage[] messages = fetchSMSMessagesFromIntent(intent); 
} 

private SmsMessage[] fetchSMSMessagesFromIntent(Intent intent) { 
    ArrayList<SmsMessage> receivedMessages = new ArrayList<SmsMessage>(); 
    Object[] messages = (Object[]) intent.getExtras().get(SMS_EXTRA_NAME); 
    for (Object message : messages) { 
     SmsMessage finalMessage = SmsMessage 
       .createFromPdu((byte[]) message); 
     receivedMessages.add(finalMessage); 
    } 
    return receivedMessages.toArray(new SmsMessage[0]); 
} 

}

我能夠讀取傳入消息就好了,而是讓我們說從這裏我想將消息轉發到另一個電話號碼,確保它已發送。我知道我可以做SmsManager.sendTextMessage(),但是如何設置PendingIntent部分來通知SMS是否已發送?

回答

6

好的,最終找到了解決方案。由於傳遞給BroadCastReceiver中onReceive()方法的上下文不允許我註冊其他BroadcastReceivers來偵聽「消息發送」事件,因此我最終掌握了應用上下文,並執行以下操作:

在廣播接收器:

SmsManager smsManager = SmsManager.getDefault(); 
    Intent intent = new Intent(SENT_SMS_FLAG); 
    PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, 
      intent, 0); 
    SMSForwarderApp.getAppContext().registerReceiver(
      new MessageSentListener(), 
      new IntentFilter(SENT_SMS_FLAG)); 
    smsManager.sendTextMessage("Here goes the destination of the SMS", null, 
      "Here goes the content of the SMS", sentIntent, null); 

SENT_SMS_FLAG僅僅是用來唯一標識我剛纔的意圖靜態字符串。我MessageSentListener看起來是這樣的:

public class MessageSentListener extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    int resultCode = this.getResultCode(); 
    boolean successfullySent = resultCode == Activity.RESULT_OK; 
    //That boolean up there indicates the status of the message 
    SMSForwarderApp.getAppContext().unregisterReceiver(this); 
      //Notice how I get the app context again here and unregister this broadcast 
      //receiver to clear it from the system since it won't be used again 
} 

}

+0

如果沒有註銷MessageSentListener你可能會面臨多個條目,我面臨的一個問題。謝謝! –