Задержка отправки смс андроида - PullRequest
1 голос
/ 07 февраля 2011

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

У меня возникают проблемы с отправкой их всех за один раз, мое приложение принудительно закрывается, и мне удалось отправить только как 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();
            }

1 Ответ

0 голосов
/ 07 февраля 2011

Написанный код поставит все в очередь на выполнение через 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);
    }
  }

Кроме того, если вы еще не запускаете этот цикл в службе, вам следует.

...