IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Programme Java écoute clavier


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut Programme Java écoute clavier
    Bonjour à tous!
    Je suis plus ou moins débutant en Java. Je suis chargé de réaliser un programme, et j'ai un petit peu besoin d'aide et de conseils...

    Globalement, je dois faire une application qui, une fois qu'elle est lancée, doit réagir en fonction des touches pressées au clavier. Par exemple, je lance le programme, et si j'appuie sur la touche "a" (ou autre), telle action doit être déclenchée.

    Je ne sais pas trop comment commencer et avancer (structure générale, outils à utiliser...). Si quelqu'un avait quelques infos/conseils, ce serait top!

    J'ai fait assez court, mais si vous voulez plus d'infos, n'hésitez pas!

    Merci d'avance!

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Ceci correspond au mécanisme des listener Java :
    http://jmdoudoux.developpez.com/cour...vent.php#event

    Ces listeners "écoutent" les actions possibles par l'utilisateur (touche de clavier, mouvement de souris) et y répondent par la levé d'une action (que tu as à implémenter).
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    ok merci je vais potasser ça...
    Est-ce que le fonctionnement est le même sous Androïd? Je vais connecter un clavier à une tablette, et le programme tournera sous Android...

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Non, ça c'est spécifique à swing, sous android ça doit être similaire mais avec d'autres classes/méthodes


  5. #5
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    J'avais essayé vite-fait le dev Android avec deux/trois boutons et le fonctionnement pour les boutons est très similaire au niveau des Listener, etc ... Parcontre j'ai pas essayé au niveau des touches de clavier.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    ok
    moi je ne cherche pas du tout à utiliser les boutons, j'ai uniquement besoin des touches du clavier.
    Mais je n'arrive pas à mettre en place les listeners...
    Pourtant je pense avoir la bonne syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    OnKeyListener  Listener = new OnKeyListener() {
     
            	public boolean onKey(View v, int keyCode, KeyEvent event) {
     
     
            		if(keyCode == KeyEvent.KEYCODE_ENTER) {
            			System.out.println("L'utilisateur a appuyé sur entrée");
            		}
     
            		return false;
    Je ne sais pas pourquoi cela ne marche pas.....
    Quelqu'un peut-il m'aider?

    merci!

  7. #7
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Il faut mettre ton Listener sur quelquechose. Car là, il n'écoute sur aucun élément.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // box est de type EditText
    box.setOnKeyListener(Listener);
    PS : n'oublie pas les balises code
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    ok, je l'ai mis sur un EditText
    Mais à chaque fois que je lance l'émulateur, que je run le projet, il me dit qu'il "has stopped unexpectly"...

    Si tu veux je te mets mon code en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    package com.clavier;
     
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnKeyListener;
    import android.widget.EditText;
     
     
     
     
    public class Clavier extends Activity implements OnKeyListener {
     
     
    	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            EditText box = (EditText) findViewById(R.id.inputNom);
     
     
            OnKeyListener  Listener = new OnKeyListener() {
     
            	public boolean onKey(View v, int keyCode, KeyEvent event) {
     
     
            		if(keyCode == KeyEvent.KEYCODE_ENTER) {
            			System.out.println("L'utilisateur a appuyé sur entrée");
            		}
     
            		return false;
     
     
     
     
     
            	}};
            	box.setOnKeyListener(Listener);
     
     
     
    	}
     
    	@Override
    	public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
    		// TODO Auto-generated method stub
    		return false;
    	}
     
    }

  9. #9
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Par défaut
    Mais à chaque fois que je lance l'émulateur, que je run le projet, il me dit qu'il "has stopped unexpectly"...
    Regarde la sortie de l'émulateur (vue DDMS si tu utilises Eclipse) et tu verras l'exception, au besoin, transmet la nous
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    Salut,
    Dans la console, il me renvoie toujours le même message :
    "Unable to debug device emulator-5554" du hierarchyviewer...
    Il me dit aussi :
    No command output when running: 'am start -n com.clavier/com.clavier.Clavier -a android.intent.action.MAIN -c android.intent.category.LAUNCHER' on device emulator-5554

    Pour le code que j'ai posté juste au dessus, le programme se lance sur l'émulateur, j'ai bien la zone de texte qui apparait, mais je ne comprends toujours pas pourquoi ça ne réagit pas quand j'appuie sur "entrée" (en fait si, ça réagit : ça saute une ligne, mais ça n'affiche pas le petit texte prévu...)

    Est-ce que ça peut être un problème de "focus"?

  11. #11
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Il faut mettre ton Listener sur quelquechose. Car là, il n'écoute sur aucun élément.

    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    1
    2


    // box est de type EditText
    box.setOnKeyListener(Listener);

    PS : n'oublie pas les balises code
    En fait tu n'as pas besoin de le mettre sur un élément, l'implémentation de l'activity suffit pour intercepter une touche , si tu le lies à un élément alors cela ne sera que lorsque l'action s'effectuera à partir de cet élément.

    Donc par exemple , on utilise la fonction onKeyDown de Activity :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class Clavier extends Activity {
     
     
    	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
    	}
     
    	@Override
    	public boolean onKeyDown(View arg0, int arg1, KeyEvent arg2) {
    		// TODO Auto-generated method stub
                      switch(keyCode){
    		  case KeyEvent.KEYCODE_ENTER :
                               // ton traitement 
    			   return false;
                      default :
                               break;
    		}
    		return false;
    	}
     
    }

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    Salut!
    Merci beaucoup pour ta réponse, c'est exactement ce que je veux faire. Je ne cherche pas à écouter un élément en particulier. Je veux simplement écouter l'activité en général, et effectuer une action dès qu'une touche est pressée.
    Cependant j'ai beau essayer le code que tu me proposes, le programme ne plante pas, mais il ne répond pas lorsque j'appuie sur entrée par exemple...

    Je te mets mon code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     
     
    package com.clavier2;
     
     
    import java.util.Locale;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.speech.tts.TextToSpeech.OnInitListener;
    import android.view.KeyEvent;
    import android.view.View;
    import android.view.View.OnKeyListener;
    import android.widget.TextView;
     
     
     
     
    public class Clavier2 extends Activity implements OnKeyListener, OnInitListener {
     
    	private TextToSpeech mTts;
    	int MY_DATA_CHECK_CODE = 0;
     
    	public String myText1 = "Bonjour!";
    	public String myText2 = "Au revoir!";
    	public String myText3 = "Comment ça va?";
     
     
    	public void onCreate(Bundle savedInstanceState) {
     
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            Intent checkIntent = new Intent();
        	checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        	startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
        	mTts = new TextToSpeech(this,this);
      }
     
     
    	public boolean onKeyDown(View v, int keyCode, KeyEvent event) {
     
     
     
                      switch(keyCode){
     
    		  case KeyEvent.KEYCODE_ENTER :
     
    			   System.out.println(myText1);
    			   mTts.setLanguage(Locale.FRANCE);
                   mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null);
    			   return false;
     
     
    		  case KeyEvent.KEYCODE_M :
    			  System.out.println(myText2);
    			   mTts.setLanguage(Locale.FRANCE);
      		       mTts.speak(myText2, TextToSpeech.QUEUE_FLUSH, null);
      		       return false;
     
     
    		  case KeyEvent.KEYCODE_L :
    			  System.out.println(myText3);
    			   mTts.setLanguage(Locale.FRANCE);
      		       mTts.speak(myText3, TextToSpeech.QUEUE_FLUSH, null);
      		       return false;
     
                          default:
                          break;
     
    		}
    		return false;
    	}
     
     
     
    	@Override
    	public void onInit(int arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	}

  13. #13
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Je me suis trompé la dernière fois sur la fonction à utiliser
    c'est onKeyDown(int keyCode, KeyEvent event) d'activity.

    enlève le " implements OnKeyListener" , tu n'en as pas besoin.

    Le code doit ressembler à cela pour récupérer l'évènement des touches .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    public class Clavier extends Activity {
     
     
    	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
    	}
     
     
           @Override
    	public boolean onKeyDown(int keyCode, KeyEvent event) {
    		// TODO Auto-generated method stub
        	switch(keyCode){
     
        	case KeyEvent.KEYCODE_ENTER :
     
        		   System.out.println("Eneter");
        		   return false;
     
     
        	case KeyEvent.KEYCODE_M :
        		  System.out.println("Code M");
        		   return false;
     
     
        	case KeyEvent.KEYCODE_L :
        		  System.out.println("Code L");
        		   return false;
     
        	      default:
        	            break;
     
        	}
        	return super.onKeyDown(keyCode,event);
    	}
    }

  14. #14
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    Génial!!
    Ca marche Nickel!
    Merci infiniment pour ton aide, tu n'imagines même pas à quel point tu m'as aidé à avancer!

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    Salut!
    Encore merci!
    J'ai encore une question : est-ce que tu saurais comment faire la même chose, mais lorsque deux touches sont pressées en même temps?
    j'ai essayé de le mettre dans la condition (case KeyEvent.KEYCODE_ENTER & KeyEvent.KEYCODE_A , mais ça ne marche pas...
    merci!

  16. #16
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    J'ai encore une question : est-ce que tu saurais comment faire la même chose, mais lorsque deux touches sont pressées en même temps?
    j'ai essayé de le mettre dans la condition (case KeyEvent.KEYCODE_ENTER & KeyEvent.KEYCODE_A , mais ça ne marche pas...
    merci!

    Hmm de mémoire le multitouch ne fonctionne directement qu'avec le Crtl et le Shift dû au fait que souvent tu peux les récupérer .

    Dans ce cas avec les procédure isAltPressed,isCtrlPressed ,...

    http://developer.android.com/referen.../KeyEvent.html

    Donc je pense que tu devrais enregistrer la dernière touche appuyée et la comparer avec le temps de la nouvelle

    Si le temps < 1s et que les touches combiner sont dans l'ordre alors tu valides l'action .

    Enfin je le verrais comme cela.

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 26
    Par défaut
    ok , je vais me lancer là dedans !
    Merci encore!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  2. Réponses: 4
    Dernier message: 24/04/2007, 18h05
  3. [Apis]parser les arguments d'un programme Java
    Par sacofan dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 06/08/2005, 14h32
  4. [votre avis m'interesse] Interface avec un programme Java
    Par LineLe dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 11/12/2004, 11h39
  5. Lancement d'un programme java depuis un script php
    Par gexti dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 07/05/2004, 17h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo