2011-10-24 4 views
1
public class SessionManager extends BroadcastReceiver{ 
Date timeOff; 
Date timeOn; 

@Override 
public void onReceive(Context context, Intent intent) { 


    if("android.intent.action.SCREEN_OFF".equals(intent.getAction())) { 
     Log.i("MobileViaNetReceiver", "Screen off - start time to end session"); 
     timeOff = Calendar.getInstance().getTime(); 
    } 

    if("android.intent.action.ACTION_SHUTDOWN".equals(intent.getAction())) { 
     // DO WHATEVER YOU NEED TO DO HERE 
     Log.i("MobileViaNetReceiver", "Shut down - log off user"); 
     DbAdapter_User db = new DbAdapter_User(context); 
     db.open(); 
     db.handleLogout(); 
     db.close(); 
    } 

    if("android.intent.action.SCREEN_ON".equals(intent.getAction())) { 

     timeOn = Calendar.getInstance().getTime(); 

     long diffInMs = timeOn.getTime()-timeOff.getTime(); 

     // convert it to Minutes 
     long diffInMins = TimeUnit.MILLISECONDS.toMinutes(diffInMs); 

     if ((int) (diffInMins) > 15) { 
      //log out user 
      Log.i("MobileViaNetReceiver", "User inactive for 15 minutes - logout user"); 
      DbAdapter_User db = new DbAdapter_User(context); 
      db.open(); // ******* HERE ************* 
      db.handleLogout(); 
      db.close(); 

     } else { 
      Log.i("MobileViaNetReceiver", "User still active"); 
     } 
    } 
} 

Lorsque l'écran est allumé, je vérifie si l'utilisateur s'est éteint pendant plus de 15 minutes, si oui, déconnectez-le. Et allez à l'écran LonIn. Je veux commencer une intention quand j'appelle cela handleLogout() (marqué * ICI * *) Puis-je faire quand étend la classe BroadcastReceiver? Si non, que puis-je faire d'autre?Android BroadcastReceiver et démarrage d'une intention

Répondre

0

Oui, vous pouvez le faire. Vous utilisez simplement le contexte qui a été transmis à votre fonction onRecieve lorsque vous créez votre intention. Une fois que vous avez l'intention, faites cet appel:

Context.startActivity(yourIntent); 
+0

Je l'ai fait .... intention i = new Intent (contexte, LogIn.class); startActivity (i); Il dit créer la méthode startActivity (intention) – user533844

+0

réponse modifiée pour répondre à votre question –

+0

Cela a fonctionné !! Merci!!! – user533844

0

Vous pouvez certainement. Essayez

Intent yourIntent = new Intent(context, YourActivity.class); 
startActivity(yourIntent); 

Si vous voulez faire dans votre méthode handleLogout, passer dans le contexte.

private method handleLogout(Context context) { 
    ... 
} 
+0

Ceci est une prochaine étape maintenant. Merci d'avoir répondu. – user533844

1

Il faut se rappeler intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); Bénédictions et bonheur à l'ingénieur de Google qui a écrit le message d'erreur suivant: "E/AndroidRuntime (2339): java.lang.RuntimeException: Impossible de démarrer le récepteur android.util.AndroidRuntimeException: Appel de startActivity() depuis l'extérieur d'une activité le contexte nécessite le drapeau FLAG_ACTIVITY_NEW_TASK, est-ce vraiment ce que vous voulez? "

public class AgeingAutoStartBroadcast extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

    Intent intent1 = new Intent(context,MyMainClass.class); 
    intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    context.startActivity(intent1); 
    ); 
} 

}

Merci à tous ceux qui écrivent des messages utiles ici

Questions connexes