我想在5或10分钟的时间间隔之后调用android活动中的一个线程。之后,我想在Android中发送自动短信,任何号码。请帮我。我已经了解了我们可以用这个做的线程,但是这个函数的问题是,它一遍又一遍地调用。提前致谢
它就是那个代码。但它曾经调用过,然后反复发送短信,直到我们停止申请。请帮帮我。
Thread timer = new Thread()
{
@Override
public void run()
{
try
{
sleep(1000*60*2);
}
catch (InterruptedException ex)
{
ex.printStackTrace();
}
finally
{
String phone_number = "123456789"; // some phone number here
String text =
"Hello this is an automatic SMS service informing you about the current status: \n" +
" City :" +cityName +"\n"
+"State :" +stateName+"\n"
+"Country :" +countryName +"\n";
SmsManager smsMgr = SmsManager.getDefault();
smsMgr.sendTextMessage(phone_number, "Hussnain Muavia", text, null, null);
txtLat.setText("SMS Sent");
}
}
};
timer.start();
答案 0 :(得分:0)
我会使用带TimerTask的Timer:
TimerTask myTimerTask = new TimerTask() {
public void run() {
//do your code here
}
};
Timer myTimer = new Timer();
myTimer.schedule(myTimerTask, when you want to start?[im milliseconds for example], 300000[5mins]);
如果您不想再次执行TimerTask,只需调用即可。 myTimer.cancel();
注意请勿忘记在myTimer.cancel();
中拨打onPause
,否则定时器将继续执行并且这会耗尽电量!
有关您的评论的更新 myTimer.schedule可以采用各种参数。对你有意思的是:
myTimer.schedule(Runnable r, When to first execute, In which Interval);
Runnable r
是你的TimerTask,它将在之后执行
When to first execute
已过期。如果你想立即开始,只需传递0即可。
In which Interval
如果你输入50,那么你的TimerTask将在When to first execute
到期后每50ms执行一次。
这应该可以解决问题。
希望它有所帮助! ;)
答案 1 :(得分:0)
以Android方式执行。使用AlarmManager
设置重复操作,然后创建自定义BroadcastReceiver
以执行特定操作。这是example如何实现的。它更复杂,但它更可靠,更安全自然。
答案 2 :(得分:0)
您想使用AlarmManager,这是Android的方式。其他一切你都会遇到麻烦。不要使用Handler.postDelayed
,因为如果Looper在计时器启动之前退出,将会删除回调:
如果Runnable已成功放入消息队列,则返回true。失败时返回false,通常是因为处理消息队列的looper正在退出。请注意,结果为true并不意味着将处理Runnable - 如果在消息发送时间之前退出looper,则消息将被删除
轻松创建闹钟。
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
long FIVE_MINS_IN_MILLIS = 1000 * 60 * 5;
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), FIVE_MINS_IN_MILLIS , pi);