2011-02-07 536 views
1

我目前正在嘗試編碼一個應用程序發送大量的短信到300+我在我的數據庫中的數字。延遲短信發送ANDROID

我正面臨着一次性發送它們的問題我的應用程序將強制關閉,我只能設法發送像27/308。

我正在使用for循環發送我的短信。

這是否可以解決這個問題?我可以在進入下一步之前延遲我的for循環1-2秒?

目前我已經試過這段代碼,但它只能睡20秒,然後它會一次性完成所有步驟,而不是每步20秒。註釋掉我的sendSms方法並用println()進行測試;

任何幫助將不勝感激。

for (i = 0; i < phoneNumbers.length; i++){ 
       txtCommand = customIDs[i] + ";" + command + ";&W<"; 
       if (phoneNumbers[i].length()>0 && txtCommand.length()>0) { 
        final String Messages = "Phone Number:" + phoneNumbers[i] + " " + "Message:" + txtCommand; 
        myHandler.postDelayed(new Runnable() { 
         public void run() { 
          System.out.println(Messages); 
          //sendSMS(phoneNumbers[i], txtCommand);  
        } 
      }, 20000); 
        } 
       else 
        Toast.makeText(getBaseContext(), 
         "Please enter both phone number and message.", 
         Toast.LENGTH_SHORT).show(); 
      } 
+0

崩潰的調用堆棧是什麼?發生崩潰時,您可以發佈LogCat的輸出嗎? – ktambascio 2011-02-07 19:39:59

回答

0

寫入的代碼會將所有內容排隊,以便在for循環後運行20秒。但是你想要的是每個任務在前一個任務之後20秒排隊。

您可以嘗試通過索引你的延遲乘以:

myHandler.postDelayed(
    ... 
, (i + 1) * 20000); 

或者,你可以遞歸改寫你的循環:

void queueMessage(final String[] phoneNumber, final int index) { 
    if (index < phoneNumber.length) { 
     // TODO do your validation here 
     myHandler.postDelayed(new Runnable() { 
      public void run() { 
      // TODO do your work here 
      queueMessage(phoneNumber, index + 1); 
      } 
     }, 20000); 
    } 
    } 

順便說一句,如果你不是已經運行這個循環在服務中,你應該。

+0

感謝邁克,因爲我不熟悉延遲現在我明白它是如何工作的。延遲適用於您的解決方案。乾杯! – Royston 2011-02-08 05:35:40