2012-10-10 65 views
2

我想開發一個SMS應用程序,它將一次發送多個SMS。我想爲短信設置一個ID。在SMS SENT報告中,我想獲取此ID。所以,我會知道一個特定的消息已經發送。如何將代碼傳遞給廣播接收器,同時接收器短消息在android中發送報告

我已經添加了廣播接收器。我也收到SMS SENT報告。

例如:我發送了10條短信,並收到了8條SMS SENT報告。我怎麼知道哪2條消息沒有發送,以便我可以重新發送?

+0

那麼你的想法看起來不錯。你有沒有嘗試添加ID? – keyser

回答

0

對於您發送的每個SMS(或部分SMS),您都提供PendingIntent。在那個PendingIntent中,你已經放置了一個Intent,當SMS(或者部分)被成功發送或者沒有發送時,你將會收到這個Intent。在這個意圖中,你可以使用額外的額外信息。因此,例如,發送消息時,代碼可能是這樣的......

String receiverCodeForThisMessage = "STRING_CODE_FOR_MY_SMS_OUTCOME_RECEIVER"; 
int uniqueCodeForThisPartOfThisSMS = 100*numberSMSsentSoFar+PartNumberOfThisSMSpart; 

Intent intent = new Intent(receiverCodeForThisMessage); 
intent.putExtra("TagIdentifyIngPieceOfInformationOne", piece1); 
intent.putExtra("TagIdentifyIngPieceOfInformationTwo", piece2); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, uniqueCodeForThisPartOfThisSMS, intent, 0); 

SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage("phonenumber", "Fred Bloggs", "Hello!", pendingIntent, null); 

但在此之前,你已經註冊了一個接收器將得到的結果和你設置的意圖;從那意圖你提取的信息:

registerReceiver(new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Get information about this message 
     int piece1 = intent.getIntExtra("TagIdentifyIngPieceOfInformationOne", -1); 
     int piece2 = intent.getIntExtra("TagIdentifyIngPieceOfInformationTwo", -1); 

     if (getResultCode() == Activity.RESULT_OK) { 
      // success code 
     } 
     else { 
      // failure code 
     } 
}, new IntentFilter(receiverCodeForThisMessage)); 
+0

謝謝你尼爾,我在發佈報告中得到了id,但我有3個問題。 (1)當我在onReceive()方法中檢查intent時,它爲所有消息提供相同的id。 (2)當我通過給定的鍵得到id時,它返回-1。 (3)onReceiver調用兩次 –

+0

按相反的順序...(3) - 如果發送兩條SMS消息或兩條消息,我期望onReceiver被調用兩次。 (2)您是否檢查過鑰匙是否正確?容易誤打字。 (1)這可能是因爲它實際上只產生一個掛起的意圖(長篇故事),但如果創建掛起的意向行中的第一個「0」是您發送的每個短消息(部分)唯一的整數,您可能會發現它會更好地工作。 –