Cliquez sur l'écouteur dans Android, comment vérifier si aucun bouton n'est cliqué pour une période de temps particulière?

StackOverflow https://stackoverflow.com/questions/9021499

Question

J'ai 10 boutons différents dans mon application pour une tâche différente à effectuer. Je souhaite développer un service qui vérifie en continu (écoute) et si l'utilisateur ne clique pas sur un bouton pour un temps particulier, disons pour 5 secondes, je souhaite effectuer une autre tâche. Comment puis-je vérifier que l'utilisateur n'a cliqué sur aucun bouton? Si quelqu'un a une idée, veuillez me le faire savoir.

Était-ce utile?

La solution

Dans chacun de vos clics, les écouteurs enregistrent l'heure du dernier bouton:

private long lastClickTimestamp;
private Handler handler = new Handler();

public void onCreate( Bundle saved ) {
   BackgroundJob job = new BackgroundJob();
   handler.postDelayed( job, SECONDS_TO_WAIT * 1000 );

   button1.setClickListener( new OnClickListener() {
       public void onClick( View view ) {
           lastClickTimestamp = System.currentTimeInMillis();
           // do the listener logic for button 1 here.
       }
   });

   button2.setClickListner( new OnClickListener() {
       public void onClick( View view ) {
           lastClickTimestamp = System.currentTimeInMillis();
           // do the listener logic for button 2 here.
       }
   });

   // repeat that for all 10 buttons.
}

Maintenant, le développeur plus intelligent créerait une classe de base réutilisable qui a géré le réglage de l'horodatage une fois, puis réutiliserait cette classe de base dans chacun des 10 boutons. Mais cela vous est laissé. Ensuite, le travail d'arrière-plan ressemblerait à:

public class BackgroundJob implements Runnable {

   private boolean done = false;

  // meanwhile in job:
  public void run() {

     if( lastClickTimestamp > 0 && System.currentTimeInMillis() - lastClickTimestamp > SECONDS_TO_WAIT * 1000 ) {
       // let's do that job!
     }

     if( !done ) {
        // reschedule us to continue working
        handler.postDelayed( this, SECONDS_TO_WAIT * 1000 ); 
     }
  }
}

Si vous devez utiliser un service, vous pouvez envoyer une notification au service disant qu'un bouton a été cliqué, le service peut suivre le moment où cela s'est produit. Je n'utiliserais pas de service pour cela parce que jouer une animation ou un son n'a pas besoin de survivre si l'application est mise en arrière-plan ou tuée. Les services sont destinés à des choses comme jouer de la musique lorsque quelqu'un fait autre chose, des applications de chat ou des choses qui doivent s'exécuter en arrière-plan lorsque l'utilisateur n'interagit pas avec l'application. Ce que vous décrivez pourrait être fait comme je l'ai montré, car lorsque l'utilisateur reçoit un appel téléphonique ou un SMS, il laissera votre application, et l'animation ou le son que vous jouez devrait probablement s'arrêter. Assez facile à faire avec l'option de gestionnaire que j'ai montré. Plus difficile, mais faisable, avec un service.

Autres conseils

Vous pouvez simplement définir un Minuteur à la longueur souhaitée. Lorsqu'un bouton est cliqué, réinitialisez simplement la minuterie. Démarrez la minuterie dans ONRESUME, donc il démarre même si l'utilisateur revient d'un appel téléphonique ou d'une autre activité. Vous devriez probablement arrêter la minuterie en onPause de l'activité.

Sur chaque bouton cliquez, mettez à jour un objet de calendrier vers une nouvelle instance de calendrier, puis vous pouvez vérifier le temps de ce calendrier et voir s'il est plus de 5 minutes.

//this is a field
Calendar calendar;
public void onClick(View v) {
calendar = Calendar.getInstance();
//etc
switch(v.getId()) {
}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top