Je suis confronté à des problèmes de redémarrage de l'accéléromètre dans une application Phonegap. Ce que j'essaie de réaliser, c'est de regarder l'accélération. Après que l'utilisateur a déplacé le smartphone, je veux arrêter l'observateur, faire quelques animations, etc. et après 500ms à 1s, je voudrais recommencer l'observateur.Accéléromètre de redémarrage de Phonegap
Ceci est essentiellement le code pour l'accéléromètre:
watchAcceleration: function() {
this.accelerometerID = navigator.accelerometer.watchAcceleration(
function(acceleration) {
console.log("STARTED WATCH");
// Accelerometer calculations going on here ...
if(this.direction === correctResponse) {
this.restartAcceleration();
}
else {
alert("FAIL");
}
// ... more accelerometer calculations here
}.bind(this),
function(err) {
console.log("error", err)
}
}
Voici le code de la fonction de redémarrage:
restartAcceleration: function() {
if(this.accelerometerID) {
navigator.accelerometer.clearWatch(this.accelerometerID);
this.accelerometerID = null;
console.log("WATCH CLEARED");
setTimeout(function() {
this.watchAcceleration();
}.bind(this), 1000);
}
}
Mon problème est que lorsque l'application démarre l'accéléromètre fonctionne parfaitement. Lorsque l'utilisateur répond correctement, la fonction restartAcceleration est invoquée et l'observateur est effacé. Après les 1000ms dans ce cas, la fonction watchAcceleration est invoquée à nouveau.
Mon téléphone est un Nexus 4. Avez-vous des suggestions sur la façon de redémarrer correctement l'accéléromètre?
Modifier (4e Juillet, 2016): Une question a été déposée ici: https://issues.apache.org/jira/browse/CB-11531
Avez-vous vérifié que 'this' est correct dans le rappel setTimeout? De plus, qu'est-ce que le comportement exact - «STARTED WATCH» n'apparaît-il pas la deuxième fois? – daserge
@daserge - Merci pour votre réponse. Le contexte de 'this' est correct. La chaîne 'STARTED WATCH' n'apparaît pas la deuxième fois. Sortie vers la console au-dessus de la ligne où la fonction 'watchAcceleration' est appelée est imprimée. Il semble donc que le rappel de l'accélération de la montre ne soit plus appelé ... – chrilehner
a-t-il le même problème si vous déployez les tests de plugin de mouvement de périphérique (il y a des tests manuels pour watch/clear)? Le problème se reproduit-il sur un émulateur ou d'autres périphériques? Quelle est la version de votre appareil Android OS? – daserge