2011-02-07 14 views
1

私は現在、私のデータベースにある300以上の数字に大量のSMSを送信するアプリをコーディングしようとしています。遅延SMS送信アンドロイド

私は1つですべてを送信する問題に直面している私のアプリは強制的に閉じると私は27/308のように送信することができます。

私はSMSを送信するためにforループを使用しています。

次のステップに進む前に、forループを1〜2秒遅らせることができるこの修正はありますか?

現在、私はこのコードを試しましたが、20秒間スリープするだけで、ステップごとに20秒ではなく1ステップですべてのステップを実行します。私の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); 

それとも、あなたが再帰的にあなたのループを書き換えることができます:余談として

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

関連する問題