Crear cuenta regresiva N segundos mientras se visualiza una Activity en Android – java android

Pregunta:


Quiero implementar una cuenta regresiva de N segundos, que se inicie cuando la Activity se muestre, se pare el contador cuando el usuario decide cambiar de app y se vuelve a reanudar cuando se vuelve a tener foco.

Se deben detectar eventos para poder lanzar procedimentos cuando

  • cada cambio de segundo
  • cuando llega a 0

y una función para saber si el contador está en funcionamiento.

Mi idea es implementar un sistema de visualización de publicidad a pantalla completa, que se requiere de visualizarla N segundos.

Preguntado por: Webserveis

tinoper

Probablemente sea viejo (lo usé en una app hace un par de años) y tengas algo mejor pero si te sirve como base esto me ha funcionado.

Sobre la clase que extiende CountDownTimer debes implementar dos métodos solamente.
Luego desde la actividad donde lo llames con algo similar a

final MiContador timer = new MiContador(30000,1000);
timer.start();


public class MiContador extends CountDownTimer{

    public MiContador(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
    //Lo que quieras hacer al finalizar

    }

    @Override
    public void onTick(long millisUntilFinished) {          
        //texto a mostrar en cuenta regresiva en un textview
        countdownText.setText((millisUntilFinished/1000+""));

    }
}

Espero te sirva, saludos.

Adaptando la respuesta de @tinoper para que el contador se pare cuando se pierde el foregroundde la Activity y se renueve la cuenta regresiva cuando vuelve a pasar en primer plano

Variables globales

private MiContador timer;
private long lastCountDown = 30000; //Milliseconds for view ad
private Boolean isCountDown = false;

en onResume()

@Override
protected void onResume() {

    super.onResume();
    Log.i(TAG, "onResume: ");
    timer  = new MiContador(lastCountDown, 1000);
    timer.start();

}

en onPause()

@Override
protected void onPause() {

    timer.cancel();
    Log.i(TAG, "onPause: ");
    super.onPause();

}

Clase MiContador extendido de CountDownTimer

public class MiContador extends CountDownTimer {
    private final String TAG = MiContador.class.getSimpleName();
    public MiContador(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
        isCountDown = true;
    }

    @Override
    public void onFinish() {
        Log.i(TAG, "onFinish: ");
        isCountDown = false;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        Log.d(TAG, "onTick: " + String.valueOf(millisUntilFinished/1000));
        lastCountDown = millisUntilFinished;
        //countdownText.setText((millisUntilFinished / 1000 + ""));

    }
}

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *