11
votes

Exemple de compas Android

Je recherche un exemple de compas pour Android. Tout ce que je dois faire est d'obtenir le bon roulement (en mode portrait et paysage).

J'ai déjà trouvé plusieurs échantillons, certains utilisent uniquement sensor.type_orientation , certains utilisent une combinaison de sensor.type_acélééromètre & sensor.type_magnetic_field .

Quel est le moyen correct et courant d'obtenir le roulement pour dire Android 1.6 - 4.0?


0 commentaires

3 Réponses :


21
votes

sensor.type_orientation est obsolète.

La documentation indique que vous devez utiliser sensormanager.getorientation () à la place.

Vous devriez donc lire à partir de sensor.type_accélééromètre ainsi que de sensor.type_magnetic_field , puis appelez sensormanager.getrotationmatrix () et enfin sensormanager.getOrientation () qui vous retournera l'orientation du téléphone.

De là si vous voyez ce diagramme, il est trivial pour obtenir l'orientation du téléphone. C'est probablement ce que votre deuxième exemple fait, mais je ne sais pas parce que vous ne m'avez pas montré ce que c'est.


4 commentaires

Désolé, j'ai oublié d'attacher l'exemple: codingforandroid.com/2011/ 01 / ... Donc, celui-ci est la bonne voie?


Évidemment, comment vous utilisez les données est à vous, Onsensorchanged est l'endroit où se trouve le calcul intéressant.


Une autre question: comment puis-je obtenir la bonne roulement en degrés de l'orientation "Azimut = [0];" ligne?


@ nr1 math.Todegrees (orientation [0])



0
votes

Utilisation d'une combinaison de sensor.type_acceleromètre et sensor.type_magnetic_field et sensormanager.getOrientation () méthode ne me donne pas des valeurs précises. La méthode dépréciée sensor.type_orientation fonctionne bien. :)


2 commentaires

Corrigez votre code puis. L'échantillon de code semble fonctionner correctement ( codingforandroid.com/2011 / 01 / ... jumelé avec le commentaire de Gezdy)


Ou peut-être avez-vous besoin de recalibrer votre appareil



5
votes

Merci à DAN pour son code d'échantillon.

Mais il n'y a qu'une petite correction : modification événement.values ​​ à event.values.clone () selon ce Discussion .
Cela fonctionne pour moi maintenant après cela Modification.


0 commentaires