cordova - resource - PhoneGap-android exit en backbutton
resource android attr ttcindex not found (5)
Estoy intentando programar el lector de RSS usando jquery mobile y cordova. Mi lector RSS consta de 3 páginas (en el mismo documento HTML: página 1, página 2, página 3). Estoy tratando de anular el comportamiento del backbutton (hardware) para que salga del programa. Para comprobar que no estoy cometiendo ningún error en la configuración del proyecto, he utilizado el proyecto de ejemplo PhoneGap y lo he cargado en Eclipse. Cada función de muestra funcionó, así que he movido mi index.html y la carpeta de res al ejemplo de phonegap. En mi index.html importo los siguientes guiones:
<script src="res/jquery-1.7.1.min.js"></script>
<script src="res/jquery.mobile-1.1.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
<script type="text/javascript" charset="utf-8" src="main.js"></script>
y mi archivo main.js se ve así:
document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is(''#homepage'')){
e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory()
}
}, false);
Puede verificar la versión de mis scripts en la primera muestra de código. ¿Alguna idea sobre cómo podría hacer que el código funcione para que simplemente salga de la aplicación cuando presiono el botón de retroceso en mi Xperia Arc? Puedo cargar mi código completo si es necesario.
EDITAR: He probado la función de bip de phonegap (cordova) en mi teléfono Android y funciona así que esto no tiene nada con una mala implementación de scripts. Debe ser algo en el archivo main.js. Tal vez algún problema de compatibilidad con las funciones del botón de retroceso de jquerymobile y la función del botón de retroceso del teléfono.
Debe esperar a que el dispositivo esté listo para agregar el detector de eventos:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady(){
document.addEventListener("backbutton", function(e){
if($.mobile.activePage.is(''#homepage'')){
e.preventDefault();
navigator.app.exitApp();
}
else {
navigator.app.backHistory();
}
}, false);
}
Para desactivar el comportamiento predeterminado del botón Atrás en dispositivos Android, simplemente registre un controlador de eventos para el botón Atrás. Esto evitaría que el botón Atrás cierre la aplicación.
El código que se muestra a continuación es específico para Framework7
$(document).on(''page:beforeinit'', function (e) {
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
document.addEventListener( "backbutton", disableBackButton, false );
}
});
function disableBackButton( e ){
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length < 3 ){
document.removeEventListener("backbutton", disableBackButton );
}
if( $.fn.hyellaIMenu.mainView.history && $.fn.hyellaIMenu.mainView.history.length > 1 ){
$.fn.hyellaIMenu.mainView.router.back();
}
};
Para anular el comportamiento predeterminado del botón de retroceso, registre un detector de eventos para el evento de botón de retroceso.
NOTA: Ya no es necesario llamar a ningún otro método para anular el comportamiento del botón de retroceso.
https://cordova.apache.org/docs/en/latest/cordova/events/events.html#backbutton
Si no desea utilizar Jquery Mobile, cambie $ .mobile.activePage.is (''# homepage'') a document.getElementById (''# homepage'') en @mornaner answer, 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);
}
De esta manera, no es necesario descargar el galimatías de Jquery Mobile solo para este propósito. Además, activePage está en desuso a partir de JQuery mobile 1.4.0 y se eliminará de 1.5.0. ( Use el método getActivePage () del widget de contenedor de página en su lugar )
Si no desea utilizar ninguna biblioteca, puede usar window.location.hash para obtener el "panel" en el que se encuentra su aplicación. Ejemplo:
function onDeviceReady(){
document.addEventListener("backbutton", function(e){
if(window.location.hash==''#home''){
e.preventDefault();
navigator.app.exitApp();
} else {
navigator.app.backHistory()
}
}, false);
}
document.addEventListener("deviceready", onDeviceReady, false);
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}
//enter code here enter code heredevice APIs are available
//enter code here
function onDeviceReady() {
// Register the event listener
document.addEventListener("backbutton", onBackKeyDown, false);
}
// Handle the back button
//
function onBackKeyDown() {
}