2011-12-22 23 views
52

Estoy desarrollando una aplicación para Android usando Jquery Mobile/Phonegap. Tengo el siguiente código para controlar el botón atrás del teléfono:Phonegap Android Botón Atrás - cerrar la aplicación con el botón Atrás en la página principal

document.addEventListener("backbutton", backKeyDown, true); 


function backKeyDown() { 
    // Call my back key code here. 
    $.mobile.changePage("#homepage", "slideup"); 
} 

Todo esto funciona bien, pero me gustaría que el cierre de la aplicación al pulsar el botón de retroceso sólo en la página principal, es esto posible?

+0

clase pública MainActivity extends Actividad { – Android

Respuesta

120

Actualización: esto ha dejado de funcionar con una actualización más reciente Phonegap (supuestamente). Siéntase libre de ofrecer una solución de trabajo si lo sabe.


Así es como lo hago:

document.addEventListener("backbutton", function(e){ 
    if($.mobile.activePage.is('#homepage')){ 
     /* 
     Event preventDefault/stopPropagation not required as adding backbutton 
      listener itself override the default behaviour. Refer below PhoneGap link. 
     */ 
     //e.preventDefault(); 
     navigator.app.exitApp(); 
    } 
    else { 
     navigator.app.backHistory() 
    } 
}, false); 

Para más información, aquí se puede encontrar la documentación relacionada con un ejemplo completo: http://docs.phonegap.com/en/2.0.0/cordova_events_events.md.html#backbutton

+2

De primera clase - aplausos Spadar – Dancer

+4

¿Por qué usa 'e.preventDefault()'? –

+1

e.preventDefault se utiliza para cancelar la acción predeterminada del evento, en este caso backHistory(), (en otras palabras, lo mismo, para evitar que la acción predeterminada no se active). –

9

Debería realizar un seguimiento de cuándo se muestra la página de inicio. Cuando usted sabe que está en la página de inicio de llamada:

navigator.app.exitApp(); 
+0

¿Dónde está el documento de phonegap para navigator.app.exitApp() [y otras extensiones navigator.app]? No pude encontrarlo en http://docs.phonegap.com/en/2.2.0/index.html –

+0

No está documentado porque no es multiplataforma. Si quieres saber qué hay disponible para Android, abre el archivo cordova.js en tu editor de texto y busca "cordova/plugin/android/app". En realidad, hay algunos comentarios buenos en el código que pueden ayudarlo a descubrir qué está pasando. –

+0

Gracias Simon - lo verificará. –

12
document.addEventListener("deviceready", onDeviceReady, false); 
function onDeviceReady() { 
    document.addEventListener("backbutton", onBackKeyDown, false); 
} 
function onBackKeyDown() 
{ 
navigator.app.exitApp(); 
} 

Gracias Spader.

+1

¿es necesario envolver el oyente de botón de retroceso dentro de un oyente listo para el dispositivo como se muestra aquí? He visto la solución 'backbutton' descrita varias veces en diferentes lugares (incluso en otros lugares en stackoverflow) y ninguna muestra específicamente envuelta como la que tiene aquí. Sería bueno si alguien puede aclarar –

1

Si no desea utilizar jQuery Mobile, cambiar $.mobile.activePage.is('#homepage') a document.getElementById('#homepage') en @Spadar respuesta Shut, como en el siguiente código:

document.addEventListener("deviceready", onDeviceReady, false); 

    function onDeviceReady(){ 
     document.addEventListener("backbutton", function(e){ 
      if(document.getElementById('#homepage')){ 
       e.preventDefault(); 
       navigator.app.exitApp(); 
      } 
      else { 
       navigator.app.backHistory() 
      } 
     }, false); 
    } 

A través de esta forma, no es necesario descargar un galimatías jQuery Mobile solo para este propósito. Also, activePage is deprecated as of JQuery mobile 1.4.0 y se eliminará de 1.5.0. (Use the getActivePage() method from the pagecontainer widget instead)

+0

¿Cómo configurar la página principal en mi index.html? es decir, document.getElementById ('# homepage') no funciona. – Zac

Cuestiones relacionadas