Notre régie publicitaire experte des nouvelles technologies
juin1014:36

Tutorial : Se servir de l’accéléromètre

Catégorie : Développement, Tutoriaux // Auteur : cr0vax // 9 commentaires

Ce tutoriel permet de découvrir l’utilisation de l’accéléromètre mais peut être étendu à tout les capteurs du téléphone de façon assez simple car tout les capteurs sont accessible de façon similaire dans Android.

Commençons par créer un nouveau projet de type Hello World :

public class bla extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

    }

}

Maintenant, pour avoir accès à l’accéléromètre, nous allons récupérer le « handler » du service système correspondant :

SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

Ensuite, il va falloir, grâce au handler « m », enregistrer une classe chargée de recevoir les évènements liée à l’accéléromètre.

En effet, les capteurs sont accessibles sur un mode asynchrone.

D’abord créons notre classe capteur :

class capteur implements SensorListener{

    public void onSensorChanged(int sensor, float[] values) {

    }

};

Le nom de la méthode à écrire est assez explicite. C’est elle qui sera appelée par le système lorsque les valeurs du capteur visé vont changer.

Dans le cas de l’accéléromètre, on cherche les valeurs des forces s’exerçant sur l’axe des x, des y et des z :

class capteur implements SensorListener{

    float x, y, z;

   

    public void onSensorChanged(int sensor, float[] values) {

        x = values[0];

        y = values[1];

        z = values[2];

    }

};

Maintenant que nous avons cette classe, la première chose est de l’instancier dans notre « Activity » :

private capteur accelerometre;

Puis, nous allons l’enregistrer auprès du gestionnaire de capteur, et du même coup spécifier que nous voulons l’accéléromètre (et pas le magnétomètre, ou autre). Pour ce faire, dans notre méthode onCreate, rajoutons ceci :

m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

Voilà, nous avons l’essentiel. A vous de donner un contenu à la fonction onSensorChanged pour créer des actions en fonctions des mouvements du téléphone.

Pour autant, afin de conclure ce tutoriel, voici le code qui permet d’afficher les valeurs des forces :

public class hello extends Activity {

private capteur accelerometre;

@Override

    public void onCreate(Bundle savedInstanceState) {

String txt = new String();

TextView tv = new TextView(this);

accelerometre = new capteur();

super.onCreate(savedInstanceState);        

        SensorManager m = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        m.registerListener(accelerometre, SensorManager.SENSOR_ACCELEROMETER);

       

        txt = « X : «  + accelerometre.x;

        txt = txt + « nY : «  + accelerometre.y;

        txt = txt + « nZ : «  + accelerometre.z;

       

        tv.setText(txt);

        setContentView(tv);

    }

}

 

class capteur implements SensorListener{

    float x, y, z;

   

    public void onSensorChanged(int sensor, float[] values) {

        x = values[0];

        y = values[1];

        z = values[2];

    }

};

 

Pour « compiler », pensez à faire un ctrl+maj+o pour qu’Eclipse complète les dépendances avec les « import » qui vont bien.

Les valeurs retournées par l’accéléromètre sont exprimées en G. Sur l’émulateur, l’accéléromètre renvoie 0, 0, 0 soit aucune force (apesanteur ou chute libre).

  • Tutorial : Accéder à la carte SD
  • Tutorial : Passer votre Sciphone N21 sur Donut
  • Tutorial : T-Mobile G1 fonctionne sur le réseau SFR
  • Tutorial : Envoyer ses coordonnées avec un code barre
  • Tutorial : Activer Navigation sur Google Maps 4.0
  • Avez-vous aimé cet article ? Dites-le !

    Tweeter ce sujet android Buzzer ce sujet android ! Partager ce sujet android sur Facebook

    RSS des commentaires

    9 commentaires

    1. Frederyck dit :

      Il manque la parenthèse de fermeture pour le lien vers wikipedia ;-)

    2. Dan dit :

      Si ya quelqu’un qui cherche à se faire 3 sous, qu’il fasse un AndWobble !
      Parce que moi, j’achète !!!
      :D

    3. Nanard dit :

      J’ai pas essayé, mais Super ce petit post !

      Tiens, çà me donne une idée : pourquoi ne pas créer un menu supplémentaire pour y mettre de genre de tuto ?

    4. Alex dit :

      Merci pour l’article. Par contre, il est dit  » … soit aucune force (apesanteur ou chute libre). ». S’il y a chute, il y a force il me semble :p

    5. cr0vax dit :

      Loi de Newton, somme des forces extérieures à zéro équivaut à mouvement rectiligne uniforme

    6. alex dit :

      La somme des forces n’est pas nulle dans une chute libre puisqu’il y a l’effet de la pesanteur. Il s’agit donc d’un mouvement rectiligne uniformément accéléré.

    7. cr0vax dit :

      Alex, tout dépend du référentiel. L’accéléromètre prend pour référentiel le téléphone. Par conséquent, en chute libre il sera dans la meme situation qu’en apesanteur, comme toi dans une cabine d’ascenseur en chute libre.

    8. Ulrich dit :

      C’est que la force P que l’on a tant appris pour le BAC S, dépend du réferentiel.

      Sympa ce petit bout de code. Il m’en faudra plus pour m’apprendre à développer…. du genre me connecter à un ordinateur. :)

    9. Djipe dit :

      Salut à tous,

      Heu… Comment dire…
      En fait, ça marche pas chez moi. :o /
      En fait, j’suis débutant en java et sur android :o (

      Mais ! Je sais créer un projet Hello World. Pour ça, j’utilise le tuto : http://www.pointgphone.com/tutoriel-android-hello-world-2301

      Et donc, qd j’copie le code ci-dessus, le compilateur me renvoie tout plein d’erreurs :
      Tout d’abord, il me dit que le chemin d’acces (com.cyrilmottier.android.helloworld.helloworld) n’est pas bon
      Puis ensuite, il ne semble pas reconnaitre tout ce qui est lié au sensors.

      Rassurez moi : il y a rien d’autre à faire que remplacer le texte ci-dessous pour le dernier gros paragraphe en fin de tuto ?
      public class Hello extends Activity {
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      }
      }

    Feel free to feed the troll

    * obligatoire


    Vu 40 fois, 1 aujourdhui

    FrAndroid est un site sur l'actualité et le développement d'Android. Pour nous contacter : equipe(at)frandroid.com