我目前正在尝试对应用进行编码,以便向我的数据库中的300多个号码发送群发短信。
我面临着一次性发送所有内容的问题我的应用程序将强制关闭,我只能像27/308一样发送。
我正在使用for循环发送我的短信。
这是否可以解决这个问题,我可以在进行下一步之前延迟我的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 :(得分: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);
}
}
顺便说一句,如果你还没有在服务中运行这个循环,你应该。