L'utilisateur démarre mon application et se connecte.
Sélectionne le délai d'expiration de la session à 5 minutes.
Effectue certaines opérations sur l'application. (tout au premier plan)
Maintenant, l'utilisateur met Myapp en arrière-plan et démarre une autre application.
----> Le compte à rebours démarre et déconnecte l'utilisateur après 5 minutes
OU l'utilisateur éteint l'écran.
----> Le compte à rebours démarre et déconnecte l'utilisateur après 5 minutes
Je veux le même comportement même lorsque l'application est au premier plan mais que l'utilisateur n'interagit pas avec l'application pendant une longue période, disons 6-7 minutes. Supposons que l'écran est allumé tout le temps. Je veux détecter le type d' inactivité de l' utilisateur (aucune interaction avec l'application même si l'application est au premier plan) et lancer mon compte à rebours.
Réponses:
J'ai trouvé une solution que je trouve assez simple basée sur la réponse de Fredrik Wallenius. C'est une classe d'activité de base qui doit être étendue à toutes les activités.
la source
Handler
etRunnable
pour chaqueActivity
créé. Si nous convertissons ces deux membres enstatic
, cela sera évité. Aussi, pourriez - vous me dire pourquoi vous avez appeléstopDisconnectTimer()
dansonStop()
`?static
modificateur). Quant auonStop()
, d'après ce dont je me souviens, j'appelleonBackPressed()
pour revenir à un écran de connexion dans le rappel de déconnexion qui à son tour appelle laonStop()
méthode. Lorsque l'utilisateur revient manuellement à l'écran de connexion, en appuyant sur retour, le chronomètre doit être arrêté ainsi que lestopDisconnectTimer()
inonStop()
. Je suppose que cette partie dépend de vos besoins et de votre mise en œuvre.onBackPressed()
suffisant. Si vous avez plusieurs activités dans votre pile, il vous suffit de créer une intention pour cette question. Vous pouvez consulter la réponse suivante pour effacer la tâche d'activité (et empêcher les utilisateurs de seJe ne connais pas un moyen de suivre l'inactivité, mais il existe un moyen de suivre l'activité des utilisateurs. Vous pouvez intercepter un rappel appelé
onUserInteraction()
dans vos activités qui est appelé chaque fois que l'utilisateur interagit avec l'application. Je suggérerais de faire quelque chose comme ça:Si votre application contient plusieurs activités, pourquoi ne pas mettre cette méthode dans une super classe abstraite (extension
Activity
) et ensuite faire étendre toutes vos activités.la source
Je pense que vous devriez aller avec ce code, c'est pour un délai de session inactif de 5 minutes: ->
la source
isInForeGrnd ===> la logique n'est pas affichée ici car elle est hors de portée de la question
Vous pouvez réactiver le verrou du processeur en utilisant le code de l'appareil ci-dessous
la source
la source
Il n'y a pas de concept d '«inactivité de l'utilisateur» au niveau du système d'exploitation, au-delà des diffusions
ACTION_SCREEN_OFF
etACTION_USER_PRESENT
. Vous devrez définir "inactivité" d'une manière ou d'une autre dans votre propre application.la source
Même vous pouvez gérer vos besoins avec les solutions @gfrigon ou @AKh .
Mais voici une solution gratuite Timer and Handlers pour cela. J'ai déjà une solution de minuterie bien gérée pour cela. Mais j'ai mis en œuvre avec succès la solution gratuite Timer and Handler.
Tout d'abord, je vous dis ce que vous devez gérer si vous utilisez Timer ou Handlers.
Enfin j'ai implémenté une solution qui est
ACTION_SCREEN_ON
/ACTION_SCREEN_OFF
récepteur de diffusion.Solution fiable la plus simple
Nous n'observerons pas l'inactivité de l'utilisateur par les minuteries plutôt que nous vérifierons l'heure de la dernière activité sur l'activité de l'utilisateur. Ainsi, lorsque l'utilisateur interagit avec l'application la prochaine fois, je vérifie l'heure de la dernière interaction.
Voici
BaseActivity.class
ce que vous allez étendre à partir de chacune de vos classes d'activités au lieu deLoginActivity
. Vous définirez votre heure de déconnexion dans le champTIMEOUT_IN_MILLI
de cette classe.la source
Dans ma classe de base d'activité, j'ai créé une classe protégée:
Donc, dans la méthode onResume - vous pouvez spécifier une action dans votre rappel ce que vous souhaitez en faire ...
la source
Au cours de ma recherche, j'ai trouvé beaucoup de réponses, mais c'est la meilleure réponse que j'ai obtenue. Mais la limitation de ce code est qu'il ne fonctionne que pour l'activité et non pour l'ensemble de l'application. Prenez ceci comme référence.
par exemple, vous avez utilisé 8000, la tâche sera effectuée après 8 secondes d'inactivité de l'utilisateur.
la source
L'inactivité de l'utilisateur peut détecter à l'aide de la
onUserInteraction()
méthode de remplacement dans AndroidVoici l'exemple de code, déconnexion (HomeActivity -> LoginActivity) après 3min lorsque l'utilisateur est inactif
la source
Gestion de l'utilisateur en cas d'expiration du délai d'interaction dans KOTLIN:
la source
Voici une solution complète qui gère l'inactivité des utilisateurs après quelques minutes (par exemple 3 minutes). Cela résout les problèmes courants tels que l'activité sautant au premier plan lorsque l'application est en arrière-plan à l'expiration du délai.
Tout d'abord, nous créons une BaseActivity que toutes les autres activités peuvent étendre.
Il s'agit du code BaseActivity.
Ensuite, nous créons une interface pour notre "Logout Listener"
Enfin, nous créons une classe Java qui étend "Application"
Remarque: n'oubliez pas d'ajouter la classe "TimeOutApp" à votre balise d'application dans votre fichier manifeste
la source
Je pense que cela doit être en combinant la minuterie avec le dernier temps d'activité.
Alors comme ça:
Dans onCreate (Bundle savedInstanceState) démarrer un minuteur, disons 5 minutes
Dans onUserInteraction (), enregistrez simplement l'heure actuelle
Assez simple jusqu'à présent.
Maintenant, quand la minuterie saute, faites comme ceci:
la source
J'avais une situation similaire à la question SO, où je devais suivre l'inactivité de l'utilisateur pendant 1 minute, puis rediriger l'utilisateur pour démarrer l'activité, je devais également effacer la pile d'activités.
Sur la base de la réponse @gfrigon, je propose cette solution.
ActionBar.java
Des ressources complémentaires
Android: Effacer la pile d'activités
Cette classe Handler doit être statique ou des fuites peuvent se produire
la source
La meilleure chose à faire est de gérer cela dans toute votre application (en supposant que vous ayez plusieurs activités) en vous inscrivant
AppLifecycleCallbacks
dans les cals de l'application. Vous pouvez utiliserregisterActivityLifecycleCallbacks()
dans la classe Application avec les rappels suivants (je recommande de créer une classe AppLifecycleCallbacks qui étend les ActivityLifecycleCallbacks):la source
Prolongez votre activité avec
pour accéder à MainActivity lorsque l'utilisateur est inactif après 3000 millisecondes sur YourActivity
J'ai utilisé une réponse précédente et l'ai convertie en kotlin.
la source