Я хочу вызвать поток после интервала в android

Я хочу вызвать поток в андроидной активности через промежуток времени, например, 5 или 10 минут. после этого я хочу отправить автоматическое SMS в android, на любое число. Пожалуйста, помогите мне. У меня есть идея о потоке, что мы можем сделать с этим, но проблема с этой функцией - это вызов снова и снова. заранее спасибо

Это только тот код. Но он когда-то звонит, а затем посылает sms несколько раз, пока мы не прекратим приложение. Пожалуйста, помогите мне.

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();
3 ответа

Я бы использовал таймер с TimerTask:

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 потому что в противном случае таймер продолжит выполнение, и эта батарея 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 будет выполняться каждые 50 мс после того, как Игнорируется после When to first execute запуска.

Это должно сделать трюк.

Надеюсь, поможет! ;)


Вы хотите использовать AlarmManager, способ Android. Все остальное вы столкнетесь с бедой. Не используйте Handler.postDelayed потому что обратный вызов будет Handler.postDelayed если Looper выйдет до истечения времени таймера:

Возвращает true, если Runnable был успешно помещен в очередь сообщений. Возвращает false при сбое, обычно из-за того, что петлевая машина обрабатывает очередь сообщений. Обратите внимание, что результат истины не означает, что Runnable будет обработан - если циклытель завершает работу до истечения времени доставки сообщения, сообщение будет удалено

Создание тревоги легко.

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);


Сделайте это по-разному. Используйте AlarmManager для установки повторяющихся действий, а затем создайте собственный BroadcastReceiver для выполнения определенных действий. Это пример того, как реализовать. Он более сложный, но более надежный и андроидный.

licensed under cc by-sa 3.0 with attribution.