2012-01-13 22 views
5

Espero que exista.Android equivalente a applicationDidBecomeActive y applicationWillResignActive (de iOS)

me gustaría almacenar el momento en que la aplicación pierde el foco y luego comprobar si se ha perdido el foco de más de n-minutos para abrir una cerradura.

Al ver cómo una aplicación se compone de actividades, creo que no habrá un equivalente directo. ¿Cómo podría lograr resultados similares?

EDITAR
Me trataron de extender la clase de aplicación a registerActivityLifecycleCallbacks() y se dieron cuenta de que no voy a ser capaz de utilizar este enfoque, ya que sólo está disponible en el nivel API 14+

Respuesta

4

Permítanme compartir cómo hice una solución compatible con versiones anteriores.

que ya habían aplicado el bloqueo de mi aplicación en el lanzamiento si había un código de acceso asociado a la cuenta. Para estar completo, necesitaba manejar situaciones en las que otras aplicaciones (incluida la actividad hogareña) se hicieran cargo durante n minutos.

Terminé haciendo una actividad base que extienden todas mis actividades.

// DataOperations is a singleton class I have been using for other purposes. 
/* It is exists the entire run time of the app 
    and knows which activity was last displayed on screen. 
    This base class will set triggeredOnPause to true if the activity before 
    "pausing" because of actions triggered within my activity. Then when the 
    activity is paused and triggeredOnPause is false, I know the application 
    is losing focus. 

    There are situations where an activity will start a different application 
    with an intent. In these situations (very few of them) I went into those 
    activities and hard-coded these lines right before leaving my application 

    DataOperations datao = DataOperations.sharedDataOperations(); 
    datao.lostFocusDate = new Date(); 
*/ 

import java.util.Date; 

import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 

public class BaseActivity extends Activity { 
    public boolean triggeredOnPause; 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     DataOperations datao = DataOperations.sharedDataOperations(); 
     if (datao.lostFocusDate != null) { 
      Date now = new Date(); 
      long now_ms = now.getTime(); 
      long lost_focus_ms = datao.lostFocusDate.getTime(); 
      int minutesPassed = (int) (now_ms-lost_focus_ms)/(60000); 
      if (minutesPassed >= 1) { 
       datao.displayLock(); 
      } 
        datao.lostFocusDate = null; 
     } 
     triggeredOnPause = false; 
    } 

    @Override 
    public void onPause(){ 
     if (triggeredOnPause == false){ 
      DataOperations datao = DataOperations.sharedDataOperations(); 
      datao.lostFocusDate = new Date(); 
     } 
     super.onPause(); 
    } 
    @Override 
    public void startActivity(Intent intent) 
    { 
     triggeredOnPause = true; 
     super.startActivity(intent); 
    } 
    @Override 
    public void startActivityForResult(Intent intent, int requestCode) { 
     triggeredOnPause = true; 
     super.startActivityForResult(intent, requestCode); 
    } 

} 

Si va a utilizar esta solución y tienen problemas para implementar el equivalente de mi clase DataOperations, por favor, comentar y me pueden enviar el código necesario.

2

Consulte Application class en androide. Extiende esta clase.

Hope esto puede ayudarle a

+0

Gracias, ahora tengo un lugar para comenzar. –

Cuestiones relacionadas