2011-02-07 7 views
1

В настоящее время я пытаюсь закодировать приложение для отправки массового SMS на более 300 номеров, которые у меня есть в моей базе данных.Задержка отправки SMS ANDROID

У меня возникли проблемы с отправкой их всех за одно приложение, которое заставит закрыть, и мне удалось отправить только 27/308.

Я использую цикл for для отправки своих SMS-сообщений.

Это исправление для этого, где я могу задержать цикл 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

ответ

0

Код, указанный в письменной форме, поставит в очередь все, чтобы запустить 20 секунд после цикла for. Но вы хотите, чтобы каждая задача была поставлена ​​в очередь на запуск через 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

+0

используется queueMessage(); так как он работает лучше. Еще раз спасибо. – Royston

+0

Для тех, кто планирует отправлять массовые SMS, удалите лимит SMS! Дополнительная информация здесь http://dylantaylor.wordpress.com/2010/10/19/closer-to-a-proper-froyo-limit-removal-fix/ – Royston

Смежные вопросы