2014-01-23 20 views
1

我試圖發送多個SMS消息。 我的代碼:SmsManager執行了幾次

for (Entry<String, String> entry : book.entrySet()) { 
    sendSMS(entry.getValue(), message); 
} 

sendSMS:

private void sendSMS(final String phoneNumber, String message) { 
     String SENT = "SMS_SENT"; 
     PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(
       SENT), 0); 
     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context arg0, Intent arg1) { 
       switch (getResultCode()) { 
       case Activity.RESULT_OK: 
        System.out.println("sent"); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        System.out.println("No network "+ phoneNumber); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        break; 
       } 
      } 
     }, new IntentFilter(SENT)); 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, sentPI, null); 
    } 

但案件進行數次。對於4個contcts:

  1. 沒有網絡123456879
  2. 沒有網絡123456879
  3. 沒有網絡79206501013
  4. 沒有網絡123456879
  5. 沒有網絡79206501013
  6. 沒有網絡79206501012
  7. 沒有網絡123456879
  8. 沒有網絡79206501013
  9. 沒有網絡79206501012
  10. 沒有網絡987654321

可能是什麼原因?謝謝!

回答

2

我認爲移動sendSMS以外的registerReceiver(...)將解決這個問題。這似乎是多次註冊的情況。

嘗試是這樣的

Intent smsSentIntent = new Intent(SENT); 
smsSentIntent.setClass(context, SmsSentBroadcastReceiver.class); 
+0

謝謝!但是你可以舉一個例子SmsSentBroadcastReceiver.class? – NickDevil

+0

這就是你想要處理SMS_SENT意圖的任何BroadcastReceiver。您可以使用registerReceiver(...)中的代碼將其放入單獨的類中。 – PVS

+0

謝謝!現在我的項目工作了! – NickDevil