Android – Cómo contar el tiempo durante un largo período
En mi aplicación quiero medir la cantidad de tiempo que el acelerómetro está en reposo.
Por ejemplo, si establezco un umbral de 0.4 m / s y la velocidad del acelerómetro siempre está por debajo de esto significa que el teléfono está en reposo (el umbral es para dar cuenta de la fluctuación en los valores).
- Tiempo del temporizador de cuenta regresiva androide
- SimpleDateFormat.getTimeInstance ignora el formato de 24 horas
- Android limitar el tiempo de grabación con la intención
- Fecha de EditarTexto
- APIs meteorológicas para Android
Quiero ser capaz de contar la cantidad de tiempo que el teléfono está en reposo y al llegar a una cierta cantidad de tiempo en reposo, a continuación, reaccionar a ese evento.
Ya tengo el acelerómetro funcionando bien, sólo necesito contar esta vez y no estoy familiarizado con cómo hacer esto, ¿alguien puede ayudarme aquí? Gracias por adelantado
Solución:
start = System.currentTimeMillis(); if (vectorTotal > 10.1 || vectorTotal < 9.5){ timelimit = (System.currentTimeMillis()+ 10000); } else if (start >= timelimit){ checkUser(); timelimit = (System.currentTimeMillis()+ 10000); }
- Problema de análisis de tiempo en Android
- Android: ejemplo de getRelativeTime
- ¿Los hilos son lo suficientemente fiables para calcular segundos?
- Tiempo desde el primer arranque
- Java cómo incrementar un int 1 cada segundo hasta que llegue a 15
- Medir el tiempo transcurrido entre dos MotionEvents en Android
- Separar horas de minutos en un valor de tiempo dado
- Tiempo inactivo de actividad para HistoryRecord?
¿Su aplicación está en primer plano?
Al principio:
long start = System.currentTimeMillis();
Guarde este valor en la base de datos o en las preferencias si es necesario.
Al final:
long end = System.currentTimeMillis();
Entonces:
long passedTime = end - start;
Usted podría fijar una alarma cada vez que usted está sobre el umbral y cuando la alarma finalmente se enciende usted hace lo que usted desea.
Haga algo como esto cuando inicie su actividad:
am = (AlarmManager) getSystemService(ALARM_SERVICE); timeoutInMillis = 60000; Intent timeoutIntent = <create the intent you want to run here>; timeoutPendingIntent = PendingIntent.getService(this, 0, timeoutIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Y luego cada vez que el acelerómetro está por encima de su umbral:
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeoutInMillis, timeoutPendingIntent );
No olvide borrar la alarma cuando salga de su actividad:
am.cancel(timeoutPendingIntent);
Creo que probablemente está buscando una solución de Servicio / Actividad dual donde el Servicio se ejecuta en segundo plano contando lo que quiera contar y proporcionando esta información a la Actividad cuando la solicite.
En cuanto al tiempo de conteo, eso es simplemente manipular el retorno de System.currentTimeMillis()
como apunta DKIT Android.
Puedes usar
- Servicio al acelerómetro de escucha. Cómo leer los datos del acelerómetro en Service with Android
- AlarmManager para llamar a su manejador después de la cantidad de tiempo especificada. http://developer.android.com/reference/android/app/AlarmManager.html
En el servicio se escuchan los eventos desde el acelerómetro, en cada evento se cancela la alarma anterior y se establece nuevo. Al llegar a una cierta cantidad de tiempo – obtendrá intención de alarma.