2010-08-31 16 views
7

Existe-t-il un moyen de capturer le clic des boutons HOME et BACK dans le fichier html dans l'application android en utilisant phonegap/jqtouch/javascript?Capture des clics sur les boutons natifs dans le téléphone Android en javascript

J'ai une application pour Android en utilisant phonegap. Je veux capturer le clic du bouton HOME et RETOUR natif du téléphone Android dans la page html pour quitter/revenir en arrière avec élégance.

+0

pouvez-vous être plus précis à la question –

+0

avoir une application pour Android en utilisant phonegap. Je veux capturer le clic du bouton HOME et RETOUR natif du téléphone Android dans la page html pour quitter/revenir en arrière avec élégance. – Newbee

Répondre

10

Vous pouvez capturer l'événement de bouton BACK dans PhoneGap, mais pas le bouton HOME (c'est une mauvaise pratique Android car il y a une attente claire de l'utilisateur quelle que soit l'application que vous utilisez à propos de ce que fait la touche HOME: retour à votre écran d'accueil! Vous ne voulez pas remplacer cette fonctionnalité).

Je vais vous diriger vers des morceaux de code dans PhoneGap (source la plus récente! Tirer de github pour la dernière version du framework phonegap) pour vous guider.

D'abord, il y a un 'BrowserKey' objet java lié au JavaScript global 'BackButton':

http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/DroidGap.java#L291

La définition de cette classe est ici: http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/BrowserKey.java

La première chose que vous devez faire dans votre application (je vous suggère de l'exécuter lors de l'initialisation de l'application) est de faire savoir au côté natif du framework que vous êtes en train de surcharger la fonctionnalité du bouton BACK. Vous devez faire cela en JavaScript avec un simple appel:

BackButton.override(); 

A partir de là, vous pouvez joindre un gestionnaire d'événements pour exécuter la logique à chaque fois que l'événement « backKeyDown » du document sur la touche BACK est touché. Quelque chose comme cela devrait fonctionner:

document.addEventListener('backKeyDown', function(e) { 
    alert('you hit the back key!'); 
}, false); 

Comme un additif, voici le code JavaScript qui enveloppe l'événement bouton retour envoi: http://github.com/phonegap/phonegap-android/blob/master/framework/assets/js/keyevent.js

En fait, après avoir appelé BackButton.override(), le côté natif de la framework appellera window.keyEvent.backTrigger() à chaque fois que le bouton BACK est touché.

+0

Je ne veux pas remplacer le bouton HOME. Je veux juste capturer le clic du bouton et terminer la session de mon application. Y a-t-il un moyen par lequel je peux faire cela? – Newbee

+1

Vous devrez étendre le code Java ici: http://github.com/phonegap/phonegap-android/blob/master/framework/src/com/phonegap/DroidGap.java#L612 avec un commutateur pour capturer le bouton HOME , puis appelez app.loadUrl ('javascript: myFunction();'); pour déclencher une fonction globale 'myFunction' en JavaScript qui gérerait cela. Il suffit d'étendre l'approche que je décris dans ma réponse sur le fonctionnement de la capture du bouton BACK et de l'appliquer au bouton HOME. –

+0

Le bouton HOME ne doit pas entraîner la fin d'une session pour votre application. Dans Android, HOME est utilisé pour la commutation d'applications et l'utilisateur peut revenir à votre application. Au lieu de cela, fermez votre session lorsque l'activité est détruite (voir [Cycle de vie de l'activité] (http://developer.android.com/guide/topics/fundamentals.html#actlife)), mais PhoneGap vous permet de le faire. –

0

J'ai une application pour Android en utilisant phonegap. Je veux capturer le clic du bouton HOME et RETOUR natif du téléphone Android dans la page html pour quitter/revenir en arrière avec élégance.

4

Cet exemple de code fonctionne pour PhoneGap 0.9.5 et versions ultérieures (testé sur 0.9.6):

document.addEventListener("menubutton", function() { 
     alert('Menu button'); 
    }, false); 

    document.addEventListener("searchbutton", function() { 
     alert('Search button'); 
    }, false);      

    document.addEventListener("backbutton", function() { 
     alert('Back button'); 
    }, false); 

bouton Home ne peut pas être manipulé. C'est réservé par le système.