2011-02-07 9 views
1

현재 데이터베이스에있는 300+ 숫자로 대량 SMS를 보내도록 앱을 코딩하려고합니다.지연 SMS 전송 ANDROID

나는 한 번에 모두 전송하는 문제에 직면하고 있으며 강제로 닫을 것이고 27/308처럼 보낼 수 있습니다.

for 루프를 사용하여 SMS를 보내고 있습니다.

다음 단계로 넘어 가기 전에 1-2 초 동안 for 루프를 지연시킬 수있는 수정 방법이 있습니까?

현재이 코드를 사용해 보았지만 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

작성된 코드는 for 루프 다음 ​​20 초 후에 실행되도록 모든 큐를 대기시킵니다. 하지만 원하는 것은 각 작업이 이전 작업보다 20 초 뒤에 실행되도록 대기열에 넣는 것입니다.

인덱스하여 지연을 곱한 시도 할 수 :

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

또는 재귀 루프를 다시 작성할 수 : AS를

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

감사합니다. Mike는 지연에 익숙하지 않아서 어떻게 작동하는지 이해합니다. 지연은 두 가지 솔루션 모두에서 작동합니다. 건배! – Royston

+0

used queueMessage(); 그것은 더 잘 작동합니다. 다시 한 번 고마워. – Royston

+0

대량 SMS를 보내려는 사람들은 SMS 한도를 제거하십시오! 더 많은 정보는 여기 http://dylantaylor.wordpress.com/2010/10/19/closer-to-a-proper-froyo-limit-removal-fix/ – Royston