Processus de "Timeout"

Processus de "Timeout" - Java - Programmation

Marsh Posté le 25-03-2014 à 11:11:58    

Bonjour à tous,
 
Je travaille actuellement sur une appli mobile en mode "web app", du coup je la développe en HTML/Javascript et j'utilise Cordova (anciennement PhoneGap) pour générer automatiquement les besoins en Java et assurer le lien avec mon dév en Javascript.
 
Je ne suis pas censé toucher au Java, mais l'application gagnant en fonctionnalités et Cordova n'étant pas exhaustif, je me retrouve dans l'obligation de m'y mettre un peu.
 
Mon cas concerne le besoin de détecter une triple pression du bouton de volume +. J'ai réussi à la détecter, mais je souhaiterais mettre un genre de timeout pour que cette triple pression doive se faire dans un laps de temps imparti (par exemple cinq secondes).
 
Voici mon code :

Code :
  1. public class MonAppli extends CordovaActivity {
  2. @Override
  3. public void onCreate(Bundle savedInstanceState) {
  4.  super.onCreate(savedInstanceState);
  5.  super.init();
  6.  // Set by <content src="index.html" /> in config.xml
  7.  super.loadUrl(Config.getStartUrl());
  8.  // super.loadUrl("file:///android_asset/www/index.html" )
  9.  // getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  10. }
  11. // Détecter la pression du bouton volume +
  12. int i = 0;
  13. @Override
  14. public boolean onKeyUp(int keyCode, KeyEvent event) {
  15.  if ((keyCode == KeyEvent.KEYCODE_VOLUME_UP)
  16.    & (event.getAction() == KeyEvent.ACTION_UP)) {
  17.   i++;
  18.   if (i == 3) {
  19.    this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');" );
  20.    i = 0;
  21.   }
  22.   return true;
  23.  }
  24.  return true;
  25. }
  26. // Empêcher le comportement normal des boutons de volume
  27. @Override
  28. public boolean onKeyDown(int keyCode, KeyEvent event) {
  29.  return true;
  30. }
  31. }


 
Je ne vois pas trop comment procéder, en fait je ne vois pas comment intégrer un timeout dans le code mais qui ne bloquerait pas la procédure. Par exemple je pensais dire que, dès que i == 1, je le remets à 0 après cinq secondes, mais sans pour autant empêcher qu'il puisse valoir 2 puis 3.
 
Merci.


Message édité par psychodarksquall le 25-03-2014 à 11:15:02
Reply

Marsh Posté le 25-03-2014 à 11:11:58   

Reply

Marsh Posté le 25-03-2014 à 12:28:24    

Tu maintiens un tableau 'dates' de 3 valeurs DateTime.
Tu complètes le tableau en fonction des pressions (ajout/remplace).
tu veux dates[2] - dates[0] < 5 000 ms

Reply

Marsh Posté le 25-03-2014 à 13:54:51    

Ah ouais pas bête, j'avais pas pensé à faire comme ça. Merci.
 
EDIT : ta méthode des dates fonctionne, seulement j'ai un nouveau problème, c'est que s'il appuie une fois dessus, qu'il attend dix secondes par exemple, et qu'ensuite il appuie trois fois dessus rapidement, ça ne fonctionnera pas, parce que i vaudra déjà 1 au lieu de 0, et au lieu de faire "1 - 2 - 3" il fera "2 - 3 - 1" :o
 
Du coup je peux pas me contenter de vérifier la différence de dates quand i vaut 3, mais je dois le faire à chaque fois, et le réinitialiser s'il y a une une trop grosse différence entre deux pressions.


Message édité par psychodarksquall le 25-03-2014 à 14:53:15
Reply

Marsh Posté le 25-03-2014 à 15:57:18    

C'est ce que je voulais dire par Tu complètes le tableau en fonction des pressions (ajout/remplace)
Les algos tout fait ne tombent jamais du ciel... j'ai réfléchi 40 secondes à ton problème


Message édité par willy le kid le 25-03-2014 à 16:16:48
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed