在向 ANDROID 中的每个号码发送群发短信之前延迟 1 分钟

DELAY BY 1 minute BEFORE SENDING BULK SMS TO EACH NUMBER IN ANDROID

我想使用我的 android 应用向 100 多人发送短信。 这些数字预加载到资产文件夹中的 numbers.txt 文件中。

到目前为止,该应用程序通过使用下面的 for...loop 语句发送最多 10 条短信来工作。 但这就是应用程序停止的地方...

我在网上看到短信平台通常在延迟模式下发送消息,有人建议我在我的代码中加入 1000 毫秒的延迟。

请帮助我如何在延迟模式下执行此 for.. 语句。

下面是我的例子。

EditText numInput = (EditText) findViewById(R.id.editTextPhone);
EditText msg = (EditText) findViewById(R.id.editMsg);

public int smsCount;
String phoneNumbers = numInput.getText.toString();
String message = msg.getText.toString();

String[] eachNumber = phoneNumbers.split(";");

smsCount = 0;
for(String num:eachNumber){
    SmsManager smsManager = SmsManager.getDefault();
    smsManager.sendTextMessage(num, null, message, null, null);
    smsCount = smsCount + 1;
    Toast.makeText(getApplicationContext(), smsCount+" SMS Sent!", Toast.LENGTH_LONG).show();
}

phoneNumber 变量最多有 100 个号码。 但是 for...loop 最多只能运行 10 个计数并停在那里....

我想在每封邮件后添加一个延迟,然后不管收件人有多少,都发送所有邮件。

我已经解决了问题... 由于找不到任何负责任的帮助,我不得不阅读 sitepoint.com 中的 Understanding and Utilizing Threads in Android

但是,要使 sendMessage() 线程正常工作,我只需添加

Thread.sleep(3000);

所以,这里是完整的 sendMessage() 线程。

public void onSendClick(View view) {
        //checkRecipients();
        //countSMSChars();
        if(message.length() < 5){
            Toast.makeText(getBaseContext(), "Invalid message format/length.", Toast.LENGTH_SHORT).show();
            Log.d("Message: ",""+"Invalid message format/length: "+message.length());
        }else if(charLength > maxLen ){
            Toast.makeText(getApplicationContext(), "Maximum allowed characters is: "+maxLen, Toast.LENGTH_LONG).show();
        }else{SENDMESSAGE();}
    }
public void SENDMESSAGE(){
        sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);

        deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);

        //---when the SMS has been sent---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS sent",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                        Toast.makeText(getBaseContext(), "Generic failure - Please check your delimiter settings or check your account balance.",
                                Toast.LENGTH_LONG).show();
                        break;
                    case SmsManager.RESULT_ERROR_NO_SERVICE:
                        Toast.makeText(getBaseContext(), "No service",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_NULL_PDU:
                        Toast.makeText(getBaseContext(), "Null PDU",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case SmsManager.RESULT_ERROR_RADIO_OFF:
                        Toast.makeText(getBaseContext(), "Radio off",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        }, new IntentFilter(SENT));

        //---when the SMS has been delivered---
        registerReceiver(new BroadcastReceiver(){
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode())
                {
                    case Activity.RESULT_OK:
                        Toast.makeText(getBaseContext(), "SMS delivered",
                                Toast.LENGTH_LONG).show();
                        break;
                    case Activity.RESULT_CANCELED:
                        Toast.makeText(getBaseContext(), "SMS not delivered",
                                Toast.LENGTH_LONG).show();
                        break;
                }
            }
        }, new IntentFilter(DELIVERED));

        try{

            runSendMessage();
        }catch (Exception e){
            Log.d("Error: ", ""+e);
            Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show();
        }
    }
    public void runSendMessage(){
        try{
            checkDelimiterMode();//check the array split delimiter symbol
            message = input.getText().toString(); //get the message to be sent
            numbers = phoneNumbers.getText().toString();//get the recipients' numbers
            //split the numbers array using the delimiter
            String[] eachNumber = numbers.split(delimiterValue);
            smsCount = 0; SMSAmount = 4.00;
                for(String num:eachNumber){
                    Thread.sleep(3000);
                    SmsManager sms = SmsManager.getDefault();
                    sms.sendTextMessage(num, null, message, sentPI, deliveredPI);
                    smsCount = smsCount+1; pb.incrementProgressBy((eachNumber.length*100)/100);
                    Toast.makeText(this,smsCount+" SMS sent @ N"+SMSAmount+" = N"+(SMSAmount*smsCount) , Toast.LENGTH_LONG).show();
                    Log.d("Number of SMS sent...",""+smsCount+" @ N"+SMSAmount+" = N"+(SMSAmount*smsCount));
                }
            }catch (Exception e){
            Log.d("Error: ", ""+e);
            Toast.makeText(getApplicationContext(),e.toString(), Toast.LENGTH_LONG).show();
        }
    }

而这个代码,可以发送超过一百万条短信...在 3 秒后发送每条消息。