2011-02-08 22 views
6

En mi aplicación quiero medir la cantidad de tiempo que el acelerómetro está en reposo.Android - Cómo contar el tiempo durante un largo período

Por ejemplo, si configuro un umbral de 0,4 m/sy la velocidad del acelerómetro está siempre por debajo de esto, significa que el teléfono está en reposo (el umbral es para dar cuenta de la fluctuación de los valores).

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, entonces reacciono a ese evento.

Ya tengo el acelerómetro funcionando bien, solo necesito contar esta vez y no estoy familiarizado con cómo hacerlo, ¿alguien puede ayudarme aquí? Gracias de antemano

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

Respuesta

6

es tu aplicación en el primer plano?

En el arranque:

long start = System.currentTimeMillis(); 

Guardar este valor en la base de datos o en las preferencias si es necesario.

Al final:

long end = System.currentTimeMillis(); 

continuación:

long passedTime = end - start; 
+0

Después de tener algunos problemas con la clase alarmmanager, lo intenté de esta manera y fue mucho más simple sin los problemas, ¡salud! – bobby123

0

Creo que probablemente está buscando en una solución de doble Servicio/Actividad donde el servicio se ejecuta en segundo plano contando lo que quiere contar y proporcionando esta información a la Actividad cuando la solicita.

En lo que se refiere al tiempo de conteo, eso simplemente está manipulando el retorno de System.currentTimeMillis() como lo señala DKIT Android.

1

Puede configurar una alarma cada vez que esté por encima del umbral y cuando la alarma finalmente se active, haga lo que desee.

hacer algo como esto cuando inicia 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 se olvide de borrar la alarma al salir de su actividad:

am.cancel(timeoutPendingIntent); 
+0

Gracias por la respuesta getekha, muy útil, solo tuve algunos problemas con el administrador de alarmas cuando ya no lo necesitaba y estaba anulando el registro de mis oyentes, 1 alarma siempre permanece establecida incluso cuando se usa am.cancel en el mismo pendiente. utilizó el método DKITandroid. ¡Voto a favor de ejemplos de código! – bobby123

0

Usted puede utilizar

En servicio usted escucha eventos del acelerómetro, en cada evento cancela la alarma anterior y establece la nueva. Al llegar a una cierta cantidad de tiempo, obtendrá la intención de la alarma.

Cuestiones relacionadas