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).
Envie de retrouver les meilleurs articles de Frandroid sur Google News ? Vous pouvez suivre Frandroid sur Google News en un clic.
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); } }
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. :)
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.
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é.
Loi de Newton, somme des forces extérieures à zéro équivaut à mouvement rectiligne uniforme
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
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 ?
Si ya quelqu'un qui cherche à se faire 3 sous, qu'il fasse un AndWobble ! Parce que moi, j'achète !!! :D
Il manque la parenthèse de fermeture pour le lien vers wikipedia ;-)
Ce contenu est bloqué car vous n'avez pas accepté les cookies et autres traceurs. Ce contenu est fourni par Disqus.
Pour pouvoir le visualiser, vous devez accepter l'usage étant opéré par Disqus avec vos données qui pourront être utilisées pour les finalités suivantes : vous permettre de visualiser et de partager des contenus avec des médias sociaux, favoriser le développement et l'amélioration des produits d'Humanoid et de ses partenaires, vous afficher des publicités personnalisées par rapport à votre profil et activité, vous définir un profil publicitaire personnalisé, mesurer la performance des publicités et du contenu de ce site et mesurer l'audience de ce site (en savoir plus)
En cliquant sur « J’accepte tout », vous consentez aux finalités susmentionnées pour l’ensemble des cookies et autres traceurs déposés par Humanoid et ses partenaires.
Vous gardez la possibilité de retirer votre consentement à tout moment. Pour plus d’informations, nous vous invitons à prendre connaissance de notre Politique cookies.
Gérer mes choix