2013-07-24 12 views
14

Ho un problema con l'applicazione PhoneGap. Voglio ridurre al minimo l'applicazione (invia App in background in modo che sia ancora in esecuzione) quando viene premuto il pulsante Indietro.Invia applicazione alla modalità sfondo quando si preme il pulsante Indietro in Phoneegap

Ecco il mio codice.

document.addEventListener("backbutton", onBackKeyDown, false); 
function onBackKeyDown() { 
} 

Se uso navigator.app.exitApp(); - la mia applicazione terminerà e se uso navigator.app.backhistory() - Sarà solo tornare alla pagina precedente.

Voglio che se premo il tasto Indietro, questo mi invierà alla schermata Home e invierà l'applicazione allo sfondo in modo che sia ancora in esecuzione. Grazie.

+0

questo è meglio di usare plugi supponiamo http://stackoverflow.com/a/17700471/2769122 –

risposta

7

La soluzione migliore è utilizzare un plug-in per avviare la schermata iniziale. Ne ho già creato uno per i miei scopi: puoi scaricare il mio progetto di prova Eclipse contenente il codice sorgente e l'APK compilato risultante from here.

Si potrebbe quindi utilizzare il mio plugin per ignorare il comportamento predefinito del pulsante di qualcosa di simile:

function onBackKeyDown(e) { 
    e.preventDefault(); 
    cordova.require('cordova/plugin/home').goHome(function(){ 
    console.info("Successfully launched home intent"); 
    }, function(){ 
    console.error("Error launching home intent"); 
    }); 
} 
document.addEventListener("backbutton", onBackKeyDown, false); 

Ecco il codice sorgente di plugin:

Home.java

package org.apache.cordova.plugin; 

import org.json.JSONArray; 
import org.json.JSONException; 

import android.content.Intent; 
import android.util.Log; 

import org.apache.cordova.api.CallbackContext; 
import org.apache.cordova.api.CordovaPlugin; 

public class Home extends CordovaPlugin { 

    private static final String LOG_TAG = "HomePlugin"; 

    @Override 
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { 
     if ("goHome".equals(action)) { 
      try {    
       Intent i = new Intent(Intent.ACTION_MAIN); 
       i.addCategory(Intent.CATEGORY_HOME); 
       this.cordova.getActivity().startActivity(i); 

      } catch (Exception e) { 
       Log.e(LOG_TAG, "Exception occurred: ".concat(e.getMessage())); 
       return false; 
      } 
      callbackContext.success(); 
      return true; 
     } 
     Log.e(LOG_TAG, "Called invalid action: "+action); 
     return false; 
    } 
} 

home.js

cordova.define("cordova/plugin/home", function(require, exports, module) { 
    var exec = require('cordova/exec'); 
    var Home = function() {}; 
    Home.prototype.goHome = function(successCallback, errorCallback) { 
     return cordova.exec(successCallback, errorCallback, 'Home', 'goHome', []); 
    }; 
    var home = new Home(); 
    module.exports = home; 
}); 

config.xml

<plugin name="Home" value="org.apache.cordova.plugin.Home"/> 
14

è possibile utilizzare questo plugin poi quando il dispositivo pronto ascoltare BackButton e quando onBackKeyDown utilizzare il plugin per lanciare la schermata iniziale

`document.addEventListener("backbutton", onBackKeyDown, false); 
function onBackKeyDown() { 
    navigator.Backbutton.goHome(function() { 
     console.log('success') 
    }, function() { 
     console.log('fail') 
    }); 
} 
` 

questo il plugin è appena aggiornato dalla risposta Dpa99c per l'utente con cordova> = 3

+0

errore di plugman durante il recupero di – SalmanShariati

+0

quale versione si utilizza? –

+0

Ho provato l'ultima versione su Cordova 3.5.0 – SalmanShariati

Problemi correlati