Detectar cuándo se abre o se reanuda la aplicación

Me gustaría hacer check-in y checkout de un usuario con el servidor cada vez que la aplicación es abierta / cerrada, si se inicia o se reanuda desde el cajón de tareas. ¿Hay una manera de hacer esto evitando tener que llamar a una función en cada actividad?

¡Gracias!

Puede buscar en Application.registerActivityLifecycleCallbacks() & c.

La respuesta proporcionada por d60402 aquí y la sugerencia de Hanno Binder para registrar las devoluciones de llamadas de la actividad usando Application.registerActivityLifecycleCallbacks () me llevó a esta solución.

He extendido la aplicación y las devoluciones de llamada registradas a los métodos de actividad onPause y onStart como se muestra a continuación. En estos métodos un temporizador se inicia / se detiene (una actividad que se salga donde onPause se llama, una nueva que es entrado donde onStart se llama). La bandera "wasInBackground" se alterna cuando la aplicación determina que está en el fondo / primer plano (verdadero / falso). Si la aplicación estaba en segundo plano cuando se ejecuta la devolución de llamada onStart, se llama "appEntered". Si el tiempo transcurrido entre las devoluciones de llamada onPause y onStart es mayor que un tiempo especificado (dando tiempo suficiente para las transiciones de actividad) se llama "appExited" donde se considera que la sesión de la aplicación está terminada.

 public class MyApplication extends Application { public static final String LOG_TAG = "MyApp"; public boolean wasInBackground = true; private AppSession appSession; private Timer mActivityTransitionTimer; private TimerTask mActivityTransitionTimerTask; private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000; // Time allowed for transitions Application.ActivityLifecycleCallbacks activityCallbacks = new Application.ActivityLifecycleCallbacks() { @Override public void onActivityResumed(Activity activity) { if (wasInBackground) { //Do app-wide came-here-from-background code appEntered(); } stopActivityTransitionTimer(); } @Override public void onActivityPaused(Activity activity) { startActivityTransitionTimer(); } ... }; @Override public void onCreate() { super.onCreate(); registerActivityLifecycleCallbacks(activityCallbacks); } public void startActivityTransitionTimer() { this.mActivityTransitionTimer = new Timer(); this.mActivityTransitionTimerTask = new TimerTask() { public void run() { // Task is run when app is exited wasInBackground = true; appExited(); } }; this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask, MAX_ACTIVITY_TRANSITION_TIME_MS); } public void stopActivityTransitionTimer() { if (this.mActivityTransitionTimerTask != null) { this.mActivityTransitionTimerTask.cancel(); } if (this.mActivityTransitionTimer != null) { this.mActivityTransitionTimer.cancel(); } this.wasInBackground = false; } private void appEntered() { Log.i(LOG_TAG, "APP ENTERED"); appSession = new AppSession(); } private void appExited() { Log.i(LOG_TAG, "APP EXITED"); appSession.finishAppSession(); // Submit AppSession to server submitAppSession(appSession); long sessionLength = (appSession.getT_close() - appSession.getT_open())/1000L; Log.i(LOG_TAG, "Session Length: " + sessionLength); } 

Bueno. Estoy publicando mis comentarios como la respuesta ya que el usuario original que hizo la pregunta encontró esto realmente útil.

El problema con las respuestas anteriores es que, la aplicación no desea checkin & checkout cuando una actividad se cierra, sino más bien cuando la aplicación se inicia o se reanuda. Así que esto puede ser problemático cuando se está cerrando o moviéndose entre las actividades cuando se tiene la aplicación abierta, que seguiría llamando a las funciones oncreate () y onpause ().

Este problema también se discutió anteriormente en stackoverflow. A continuación se muestra el enlace.

Cómo detectar cuándo una aplicación de Android va al fondo y volver al primer plano

Puede haber diferentes maneras de resolver este problema. El enlace anterior proporciona más información sobre cómo puede solucionarlo.

Puede utilizar los oncreate() y onpause() .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.