Pregunta

Estoy usando PhoneGap 0.8 y me gustaría para detectar un gesto básico batido. He encontrado dos fragmentos relevantes:

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

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

Ninguno de ellos están trabajando para mí. Desafortunadamente la documentación parece un poco anticuado, y la referencia de API para PhoneGap es sólo un montón de pruebas. Sé que puede ser hecho sólo que no tengo un buen punto de partida conocido.

Si alguien puede proporcionar un breve fragmento de código de detección de movimiento de la PhoneGap para que sepan que funciona para ellos estaría muy agradecido. Gracias por su tiempo!

¿Fue útil?

Solución

Su primer enlace está utilizando PhoneGap.Gesture, que por lo que yo puedo ver no existe (al menos para el iphone) en 0,8. Es todo un post reciente, aunque por lo puedan haber sido añadido recientemente? No he utilizado cualquier revisión más tarde de 0,8

He añadido soporte agitar el gesto a una aplicación PhoneGap por 'que se extiende' phonegap como sigue. Pero primero una advertencia:

Apple han considerado PhoneGap 0.8 como aceptables para su presentación a la tienda de aplicaciones. Como este es esencialmente una extensión (aunque muy simple) a PhoneGap 0.8 puede haber un riesgo de rechazo. La aplicación que desarrolló este pues aún no ha pasado por el proceso de aprobación, por lo que no puede aconsejar más lejos en esto.

También tenga en cuenta que esto sólo funciona en OS 3.0 o superior debido al uso de la nueva API UIEventSubtypeMotionShake

Además, este es específica iPhone. Si desea que las capacidades de plataforma cruzada de PhoneGap, esta respuesta no puede ser para usted a menos que usted se sienta cómodo implementar la modificación lado nativo en las otras plataformas (Android, etc.). En este caso, puede que sea mejor que esperar a un lanzamiento oficial PhoneGap que soporte esta en el iPhone.

Agregue el código siguiente para PhoneGapViewController.m

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

A continuación, añadir esto como una myext.js módulo 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();
    });
}

Ahora incluyen myext.js en su sección de contenido HTML <head> justo después del enlace a phonegap.js

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

y el uso de la escritura (ejemplo provoca una alerta, pero haga lo que tiene que hacer):

function watchShake() {
  var cb = function(){
    navigator.notification.alert("Shake it!");
  };
    navigator.myext.addShakeGestureListener(cb);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top