2011-02-07 151 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