web-dev-qa-db-fra.com

Quand utiliser l'accéléromètre ou le gyroscope sur Android

Est-il acceptable de supposer que la plupart des appareils utilisateur auront un gyroscope? En d'autres termes, vais-je exclure un nombre important de personnes en utilisant un gyroscope dans mon application?

Je fais une application de livre de contes pour enfants et je veux que l'utilisateur puisse incliner son appareil autour de l'axe de lacet pour déplacer un fauteuil à bascule d'avant en arrière. C'est une petite partie de l'application et elle n'a pas besoin d'être très précise. Y a-t-il un capteur à utiliser par rapport à l'autre?

34
user2892857

Couverture utilisateur:

La plupart des appareils ont à la fois un gyroscope et un accéléromètre, mais presque chaque appareil a un accéléromètre. Surtout les appareils plus anciens et les moins chers n'ont pas de gyroscope. N'oubliez pas que puisque c'est une application pour enfants, peut-être que les parents ne veulent pas que les plus petits utilisent leur superbe tablette à 700 $, et qu'ils utiliseront probablement des moins chers. Les appareils moins chers ont tendance à ne pas avoir de gyroscopes. Donc +1 pour l'accéléromètre.

Expérience utilisateur

L'accéléromètre mesure l'accélération dans le système de coordonnées tridimensionnel. Dans la plupart des cas (lorsque l'utilisateur ne saute pas ou ne lance pas l'appareil), la plus grande partie de l'accélération est la gravité. Avec la gravité seule, il est très facile de déterminer l'inclinaison et les légers mouvements. De plus, vous avez le capteur logiciel Gravity pour éliminer les mouvements étranges et l'accélération linéaire pour éliminer la gravité. Le gyroscope détecte la rotation. Il est plus sensible, plus précis et produit des événements plus rapidement que l'accéléromètre, mais il semble être exagéré pour ce cas d'utilisation. Si vous vouliez créer un jeu de course en 3D ou un simulateur de vol, ce serait une victoire pour le gyroscope, mais pour une application pour enfants, c'est tout simplement trop.

tilisation de la batterie

Pas de concours ici. Le gyroscope utilise 3 à 30 fois plus de batterie (peut-être plus, selon l'appareil), tandis que l'accéléromètre est très doux pour la batterie. De plus, pour la plupart des utilisateurs, l'accéléromètre est déjà actif (pour faire pivoter l'écran automatiquement), il n'y a donc pas d'utilisation de la batterie du capteur ici. +1 pour l'accéléromètre

Programmation

Les capteurs sont assez faciles et simples à implémenter dans les applications Android. Comme le gyroscope détecte la vitesse de rotation, il donne toutes les valeurs 0 si l'appareil reste immobile (et peut-être un peu de bruit dans la plage de + -0,01rad/s), vous n'avez donc besoin que d'un petit bloc if pour ignorer les mouvements très légers (par exemple lorsque les valeurs du gyroscope sont inférieures à 0,2 rad/s). Avec l'accéléromètre, vous avez besoin de calculs supplémentaires pour déterminer l'orientation de l'appareil et quel axe est en fait celui qui nécessite plus d'attention pour déterminer la direction du mouvement. Ce n'est pas difficile à faire, mais cela ajoute quelques lignes de code supplémentaires et un débogage supplémentaire à votre travail. + 1 pour le gyroscope.

Conclusion

Pour une simple application pour enfants, l'accéléromètre est le chemin à parcourir. Je n'y penserais plus. Comme vous ne vous souciez pas beaucoup de la précision, vous éliminez en fait les points gagnés par le gyroscope.

61
foibs

Je pense que ces capteurs sont ceux à considérer (je cite le livre "Reto Meier, Professional Android 4 Application Development" ici)):

  • Sensor.TYPE_ACCELEROMETER - Un accéléromètre à trois axes qui renvoie l'accélération actuelle sur trois axes en m/s2 (mètres par seconde, par seconde.)

  • Sensor.TYPE_GYROSCOPE— Un gyroscope à trois axes qui renvoie le taux de rotation de l'appareil le long de trois axes en radians/seconde. Vous pouvez intégrer le taux de rotation dans le temps pour déterminer l'orientation actuelle de l'appareil; cependant, il est généralement préférable de l'utiliser en combinaison avec d'autres capteurs (généralement les accéléromètres) pour fournir une orientation lissée et corrigée.

  • Sensor.TYPE_ROTATION_VECTOR— Renvoie l'orientation de l'appareil comme une combinaison d'un angle autour d'un axe. Il est généralement utilisé comme entrée de la méthode getRotationMatrixFromVector du Sensor Manager pour convertir le vecteur de rotation renvoyé en matrice de rotation. Le capteur de vecteur de rotation est généralement implémenté comme un capteur virtuel qui peut combiner et corriger les résultats obtenus à partir de plusieurs capteurs, tels que les accéléromètres et les gyroscopes, pour fournir une matrice de rotation plus fluide.

Fin du devis ... Vous pouvez trouver l'implémentation de capteur par défaut pour un type donné en utilisant la méthode getDefaultSensor, par exemple:

Sensor defaultGyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);

Si cela renvoie null, l'appareil n'a pas le capteur, vous savez donc ne pas essayer de l'utiliser. Je m'attends à ce que la majorité des appareils disposent de ces capteurs (probablement l'accéléromètre) car ce sont eux qui détectent la rotation de l'écran.

3
NigelK

Au fil du temps, le nombre et les types de capteurs disponibles dans un appareil "typique" Android ont changé de façon assez spectaculaire. Mais certains moyens de mesurer l'orientation de l'appareil figurent parmi les anciennes capacités. Il semblerait que la bonne approche consiste à tester au moment de l'exécution pour les nouveaux capteurs, et à revenir aux anciens, tout en traitant avec élégance le cas où les informations ne sont tout simplement pas disponibles.

Le document du développeur Sensor Overiew contient un tableau indiquant quand des types de capteurs spécifiques ont été rendus disponibles pour la première fois par Android niveau API. Mais notez que cela reflète simplement la capacité de cette API niveau pour parler de ce type de données; un périphérique spécifique peut encore manquer le matériel requis.

Il semble que l'accéléromètre et le gyroscope soient parmi les capteurs les plus anciens et soient probablement présents dans la plupart des combinés.

À l'heure actuelle (décembre 2013), le tableau de bord du développeur montre que tous les appareils, sauf environ 1,6% Android accédant au Play Store, sont de la version 2.3 ou plus récente (API 10 ou Ces données sont basées uniquement sur la version 2.2 ou les appareils plus récents utilisant le magasin, les appareils plus anciens que 2,2 ne représentaient qu'environ 1% de tous les appareils qui se connectaient à un serveur Google en août 2013. Cette page contient des informations sur la résolution d'affichage de l'appareil, mais ne semble pas couvrir d'autres fonctionnalités des appareils. Je n'ai pas pu trouver un tableau de bord qui couvre spécifiquement les capteurs disponibles dans la nature.

1
RBerteig

Je pense que la plupart des téléphones ont la possibilité de s'incliner. J'ai un téléphone bon marché de 2 ans qui était à 45 $ quand il était nouveau, et fonctionne Android 2.1, il s'incline et change de perspective.
J'ai aussi une tablette qui a trois ans, et elle s'incline aussi.
Je dirais que vous êtes tout à fait en sécurité en supposant que l'inclinaison sera là.

1
baash05

Presque tous (ou même tous) les téléphones auront un accéléromètre. Mais tous n'ont pas de gyroscope. Quelqu'un a fait une liste non exhaustive de téléphones avec gyroscopes ici: Quels téléphones Android ont un gyroscope?

Si vous parvenez à le faire fonctionner en utilisant uniquement l'accéléromètre, ses autres appareils prendront en charge votre application, mais je ne peux pas vraiment vous dire à quel point cette différence est importante

1
Basile Perrenoud