2010-01-06 16 views
2

J'utilise PhoneGap 0.8 et j'aimerais détecter un mouvement de base. J'ai trouvé deux extraits pertinents:Comment puis-je détecter un mouvement de secousse dans PhoneGap 0.8?

http://groups.google.com/group/phonegap/browse_thread/thread/25178468b8eb9e9f

http://phonegap.pbworks.com/Handling-Shake-Events

Aucun d'entre eux travaillent pour moi. Malheureusement, la documentation semble un peu obsolète et la référence de l'API pour PhoneGap est juste un tas de tests. Je sais que cela peut être fait, je n'ai tout simplement pas un bon point de départ.

Si quelqu'un peut fournir un petit extrait de code de détection de tremblement pour PhoneGap qu'ils savent travailler pour eux, je serais très obligé. Merci pour votre temps!

Répondre

3

Votre premier lien utilise PhoneGap.Gesture, ce qui pour autant que je peux voir n'existe pas (au moins pour l'iphone) dans 0.8. C'est un post assez récent mais qui a peut-être été ajouté récemment? Je n'ai utilisé aucune révision ultérieure à 0,8

J'ai ajouté la prise en charge des gestes de secousse à une application phonegap en 'étendant' le jeu de téléphone comme suit. Mais d'abord un avertissement:

Apple a considéré PhoneGap 0.8 comme acceptable pour la soumission au magasin d'applications. Comme il s'agit essentiellement d'une extension (quoique très simple) à PhoneGap 0.8, il existe un risque de rejet. L'application pour laquelle j'ai développé cette application n'a pas encore été soumise au processus d'approbation, je ne peux donc pas vous en dire plus à ce sujet.

Il faut aussi savoir que cela ne fonctionne que sur OS 3.0+ en raison de l'utilisation de la nouvelle API UIEventSubtypeMotionShake

De plus, c'est spécifique iPhone. Si vous voulez utiliser les fonctionnalités multiplateformes de PhoneGap, cette réponse ne sera peut-être pas pour vous, à moins que vous soyez à l'aise pour implémenter la modification côté natif sur les autres plates-formes (Android, etc). Dans ce cas, il peut être préférable d'attendre une version officielle du téléphone qui supporte cela sur l'iPhone.

Ajoutez le code suivant à PhoneGapViewController.m

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event 
{ 
    if (UIEventSubtypeMotionShake == motion) 
    { 
     [webView stringByEvaluatingJavaScriptFromString:@"navigator.myext.onShakeGesture();"]; 
    } 
} 

Puis ajouter comme module javascript myext.js

/* We need PhoneGap.js to be loaded to work properly before we can initialise so wait for it here */ 
(function() 
{ 
    var timer = setInterval(function() 
    { 
     if (typeof(PhoneGap == 'object')) 
     { 
      clearInterval(timer); 
      myExtInit(); 
     } 
    }, 1); 
})(); 

function MyExt() 
{ 
    // initialization 
    this.callbacks = { 
     onShakeGesture: [] 
    }; 
} 

/* Called by ObjectiveC side when a shake gesture is detected */ 
MyExt.prototype.onShakeGesture = function() 
{ 
    for (var i = 0; i < this.callbacks.onShakeGesture.length; i++) 
    { 
     var f = this.callbacks.onShakeGesture[i]; 
     f(); 
    } 
}; 

MyExt.prototype.addShakeGestureListener = function(shakeCallback) 
{ 
    if (typeof(shakeCallback) == 'function') 
    { 
     this.callbacks.onShakeGesture.push(shakeCallback) 
    } 
}; 

function myExtInit() 
{ 
    // Init phonegap extension specific objects using PhoneGap.addConstructor 
    PhoneGap.addConstructor(function() { 
     if (typeof navigator.myext == "undefined") navigator.myext = new MyExt(); 
    }); 
} 

comprennent maintenant myext.js dans votre contenu HTML <head> section juste après le lien vers phonegap.js

<script type="text/javascript" charset="utf-8" src="myext.js"/> 

et utiliser à partir du script (exemple provoque une alerte, mais faites ce que vous devez faire):

function watchShake() { 
    var cb = function(){ 
    navigator.notification.alert("Shake it!"); 
    }; 
    navigator.myext.addShakeGestureListener(cb); 
} 
+0

Merci pour cette réponse. Cela donne un bon aperçu des extensions de PhoneGap et répond à la question initiale. – GloryFish

+0

L'application a-t-elle réussi le processus d'acceptation d'Apple? – Ash

+1

@Ash, le projet a été abandonné alors je n'ai jamais pu le découvrir. Cependant, par une heureuse coïncidence, je travaille actuellement sur un autre projet avec l'intégration de PhoneGap et les nouvelles versions de PhoneGap ont un framework de plugin beaucoup plus extensible (PGPlugin) que vous pouvez utiliser à la place de cette réponse. Voir http://wiki.phonegap.com/w/page/36753496/How%20to%20Create%20a%20PhoneGap%20Plugin%20for%20iOS – cidered