2012-01-13 11 views
5

Spero che esista.Android equivalente a applicationDidBecomeActive e applicationWillResignActive (da iOS)

Vorrei memorizzare l'ora in cui l'applicazione perde la messa a fuoco e quindi verificare se ha perso la messa a fuoco per più di n-minuti per attivare un blocco.

Vedere come un'applicazione è composta da attività, penso che non ci sarà un equivalente diretto. Come potrei ottenere risultati simili?

EDIT
ho cercato di estendere la classe Application per registerActivityLifecycleCallbacks() e si rese conto che non sarò in grado di utilizzare questo approccio perché è disponibile solo in Livello API 14+

risposta

4

mi permetta di condividere come ho fatto una soluzione compatibile.

Avevo già implementato il blocco della mia app all'avvio se c'era un passcode associato all'account. Per essere completo, avevo bisogno di gestire situazioni in cui altre applicazioni (compresa l'attività domestica) subentrano per n-minuti.

Ho finito per creare una BaseActivity che estende tutte le mie attività.

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

} 

Se avete intenzione di utilizzare questa soluzione e hanno difficoltà a attuare l'equivalente della mia classe DataOperations, si prega di commento e posso postare il codice necessario.

2

Fare riferimento a Application class in Android. Estendi questa classe.

Spero che questo possa aiutare a

+0

Grazie, ora ho un punto di partenza. –

Problemi correlati