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

Related Posts:

Girar Rectángulo con LibGDX – android libgdx
Pregunta: Estoy haciendo un programilla de prueba que se compone de : 4 botones , arriba, abajo, izquierda y derecha. Una nave espacial, formada por un ...
Botones con android y LibGDX – android libgdx
Pregunta: Buenas, he creado un pequeño boton en android, con libGDX muy sencillo, pero el problema es el siguiente: Le tengo asignada una funcion que escribe ...
¿Location manager Android? Experiencias – android mysql android-studio
Pregunta: He desarrollado una aplicación Gps que envía información a Mysql cada 10 seg atraves de locationmanager. ¿Según su experiencia hasta cuanto es posible disminuir ...
Tomcat no encuentra los recursos – java angularjs http
Pregunta: Bueno tengo una aplicación con AngularJS que hace peticiones al API de gitHub como un ejemplo para aprender a usar AngularJS, pero el problema ...
Crear prototipos para aplicaciones Android – android prototipos
Pregunta: estoy interesado en optar por una herramienta que me sea bastante util para poder realizar prototipos de aplicaciones móviles, especificamente para Android. Empece buscando ...
¿Como Se Instala Un Apk Y Como Se Ve Despues? – android
Pregunta: Tengo una duda sobre que pasa con ese archivo apk una vez instalado si se queda como uno solo o se separa en fragmentos ...
¿Como usar la clase Intent para mostrar las apps del usuario – android android-intent
Pregunta: Quiero que mi app muestre las aplicaciones del usuario en un ListView. He tratado de investigar y me salio en ingles la mención a esta ...
Calcular distancia entre dos coordenadas android – android
Pregunta: quisiera saber como puedo hallar la distancia entre 2 coordenadas en kilómetros en trayecto vía automóvil, estoy usando la API de google maps. Agradezco cualquier ...
¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi app? – java woocommerce
Pregunta: ¿Es legal leer imágenes y descripciones de otro sitio web y ponerlas en mi programa? Supongamos que quiero hacer una aplicación como la de ebay, ...
Problema con consulta JPQL + JPA + JSF + EJB – java jsf jpa
Pregunta: @Override public Usuario iniciarSesion(Usuario us){ Usuario usuario = null; String consulta; try { ...
No encuentra el audio dentro de src – java
Pregunta: Tengo una carpeta "audios" dentro de "src", para cuando construya el proyecto pueda reproducir los audios. Intento abrir el audio pero me salta "java.lang.NullPointerException" ...
¿Cómo puedo crear una aplicación Android que no se pueda cerrar así como WhatsApp? – android android
Pregunta: Esta pregunta ya tiene una respuesta aquí: ...
¿Como saber con Apache POI y java si una columna en excel esta oculta? – java apache-poi
Pregunta: Hola estoy importando archivos excel con extensión xls y xlsx pero mi duda es como poder detectar si la columna de una celda esta ...
Spinner y EditText – java android
Pregunta: Tengo este código para cargar un spinner con datos de una base de datos: private class Getfrutas extends AsyncTask<Void, Void, Void> { ...
Crear listview en un Fragment en android – android
Pregunta: Estoy creando una aplicación en la cual incluyo un listview, en un Fragment. Dicho listview ya lo había ejecutado en un activity normal y ...

Add a Comment

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