Como usar herramienta Timer y TimerTask

publicado por: Anonymous

Quiero que el programa verifique cada segundo sí se cumple la condición del if , pero me salen unos errores ,no se que estoy haciendo mal, este es el código :

package alarmexample.example.com.alarmexample;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;


public class MainActivity extends Activity {


public  String getHora(String strFormato) {

    Calendar objCalendar = Calendar.getInstance();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(strFormato);

    String strHora = simpleDateFormat.format(objCalendar.getTime());
    return strHora;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Timer timer = new Timer();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            startAlert();}

public void startAlert() {

    String hora_sistema = getHora("HH:mm:"); //Obtenida con el método
    String horaTuya = "03:13:";

    int timeInSec = 5;

    if (horaTuya.equals(hora_sistema)) {

        Intent intent = new Intent(this, MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                this.getApplicationContext(), 234, intent, 0);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (timeInSec * 1000), pendingIntent);
        Toast.makeText(this, "La alarma sonará en " + timeInSec + " segundos", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "no hay nada ", Toast.LENGTH_SHORT).show();}
                     }
           },0,1000);//Cada segundo.
    }
}

solución

Timer y TimerTask no son “herramientas”, son clases de java que te ayudan a programar una ejecución única o repetida con un temporizador.

El método startAlert(); lo debes de llamar dentro del Handler, no debes llamar la declaración de todo el método dentro de onCreate únicamente startAlert(); :

public class MainActivity extends Activity {


    public  String getHora(String strFormato) {

        Calendar objCalendar = Calendar.getInstance();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(strFormato);

        String strHora = simpleDateFormat.format(objCalendar.getTime());
        return strHora;

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final Handler handler = new Handler();
        final Runnable r = new Runnable() {
            public void run() {

                startAlert();  //*** Aquí!!!

                handler.postDelayed(this, 1000);
            }
        };

        handler.postDelayed(r, 1000);




    }   

   public void startAlert() {


        String hora_sistema = getHora("HH:mm"); //hora sistema
        String mihora = "23:57"; //hora establecida

        int timeInSec = 5;

        if ( mihora.equals(hora_sistema )){


            Toast.makeText(this, " hola,despierta ",Toast.LENGTH_SHORT).show();


        }else {Toast.makeText(this, "aún no es la hora ",Toast.LENGTH_SHORT).show();}
    }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *