Domanda

Sto utilizzando PhoneGap 0.8 e mi piacerebbe rilevare un gesto semplice scossa. Ho trovato due frammenti rilevanti:

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

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

Nessuno di loro stanno lavorando per me. Purtroppo la documentazione sembra un po 'datata e il riferimento API per PhoneGap è solo un mucchio di test. So che può essere fatto solo che non ho un noto buon punto di partenza.

Se chiunque può fornire un breve frammento di codice di rilevamento di scossa per PhoneGap che sanno funziona per loro sarei molto grato. Grazie per il tuo tempo!

È stato utile?

Soluzione

Il primo collegamento sta usando PhoneGap.Gesture, che, per quanto posso vedere non esiste (almeno per iPhone) a 0,8. E 'piuttosto un recente post anche se così potrebbe essere stato aggiunto di recente? Non ho usato alcuna revisione successiva di 0,8

Ho aggiunto il supporto scossa gesto per un'applicazione PhoneGap da 'estensione' PhoneGap come segue. Ma prima un avvertimento:

Apple ha ritenuto PhoneGap 0.8 accettabile per la presentazione di app store. Poiché questo è essenzialmente un'estensione (anche se molto semplice) per PhoneGap 0.8 ci può essere un rischio di rigetto. L'applicazione che ha sviluppato questo per non è ancora passata attraverso il processo di approvazione, quindi non posso consigliare ulteriormente su questo.

Anche essere consapevoli del fatto che questo funziona solo su OS 3.0+ causa di un uso della nuova API UIEventSubtypeMotionShake

Inoltre si tratta di iPhone specifica. Se si desidera che le funzionalità della piattaforma trasversali di PhoneGap, questa risposta non può essere per voi se non hai dimestichezza attuare la modifica lato nativo sulle altre piattaforme (Android, ecc). In questo caso può essere meglio aspettare solo per un rilascio PhoneGap ufficiale che sostiene questo su iPhone.

Aggiungere il seguente codice a PhoneGapViewController.m

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

Quindi aggiungere questo come un modulo myext.js javascript

/* 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();
    });
}

Ora includono myext.js nella vostra sezione contenuti <head> HTML subito dopo il link al phonegap.js

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

e utilizzare dallo script (ad esempio provoca un avviso, ma fare ciò che devi fare):

function watchShake() {
  var cb = function(){
    navigator.notification.alert("Shake it!");
  };
    navigator.myext.addShakeGestureListener(cb);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top