Existe-t-il un moyen d'accéder aux données de l'accéléromètre à l'aide de Javascript sur le navigateur d'Android? Je sais que cela supporte "onorientationchange", mais j'aimerais tout avoir.
Précision: je demande comment faire cela dans un site Web et non dans une application native.
Depuis ICS, Android 4.0, vous pouvez utiliser l'événement 'devicemotion' via un écouteur d'événements JavaScript pour accéder aux données de l'accéléromètre. Voir la documentation du W3C pour savoir comment y accéder - http://dev.w3.org/geo/api/spec-source-orientation.html .
Remarque - Le titre de la documentation W3C porte le nom 'orientation de périphérique', mais la spécification inclut en effet la documentation d'événement 'devicemotion'.
Faire une mise à jour de ce fil.
HTML5 permet à quelqu'un de faire cela. Détecter si un accéléromètre est présent ou non est facile.
if (window.DeviceMotionEvent == undefined) {
//No accelerometer is present. Use buttons.
alert("no accelerometer");
}
else {
alert("accelerometer found");
window.addEventListener("devicemotion", accelerometerUpdate, true);
}
Dans la fonction que vous définissez pour recevoir les événements de l'accéléromètre, vous pouvez consulter le membre accelerationIncludingGravity
.
function accelerometerUpdate(e) {
var aX = event.accelerationIncludingGravity.x*1;
var aY = event.accelerationIncludingGravity.y*1;
var aZ = event.accelerationIncludingGravity.z*1;
//The following two lines are just to calculate a
// tilt. Not really needed.
xPosition = Math.atan2(aY, aZ);
yPosition = Math.atan2(aX, aZ);
}
Plus d'informations peuvent être trouvées ici: http://dev.w3.org/geo/api/spec-source-orientation.html
Si vous essayez d'accéder à l'accéléromètre à partir d'une page Web hébergée sur un serveur (une version intégrée dans une application native via WebView
), alors le les données de l'accéléromètre ne semblent pas être disponibles pour l'instant pour Android. Vous trouverez une évaluation plus détaillée ici: http://www.mobilexweb.com/blog/Android-froyo-html5-accelerometer-flash-player .
Vous pouvez également consulter cette SO publication: Détecter la rotation du téléphone Android dans le navigateur avec JavaScript
Si je lis correctement la documentation, vous pouvez configurer une classe (sous Java/Android) fournissant les fonctionnalités d'accéléromètre dont vous avez besoin pour les fonctions publiques.
Configurez ensuite une interface javascript pour la vue Web à l'aide de l'appel addJavascriptInterface, ce qui permet aux fonctions publiques de cette classe d'être appelées à partir de javascript.
En regardant ce post flash.sensors.Accéléromètre sur Android dans un navigateur Web il semble que les données de l’accéléromètre soient disponibles pour clignoter. Donc, une solution de contournement possible (du moins pour les appareils dotés de la technologie Flash) serait un petit applet flash qui capturera les données pour vous.
Ça sonne comme un bidouillage, mais ça sonne quand même mieux que de tout faire en flash