2015-08-10 10 views
48

Sto utilizzando un servizio nella mia app cordova che genera una notifica startForeground nel onCreate. Se l'app viene uccisa tramite scorrimento e riavviata, l'evento cordova pronto per il dispositivo non viene più attivato. Sembra che l'oggetto cordova non sia definito quando l'app viene riavviata. Ottengo il seguente messaggio di errore:startForeground() che causa problemi con cordova

E/Web Console(19472): Uncaught TypeError: Object #<Object> has no method 'exec' at file:///android_asset/www/src/jsFile.js:31

Linea 31 e seguenti:

cordova.exec(function (r) { 
      if (callback) { 
       callback(r); 
      } 
     }, function (err) { 
      if (callback) { 
       callback(false); 
      } 
     }, "Plugin", "functionName", []); 

Il problema si verifica solo se uso il startForeground al mio servizio, se io commento questa parte del codice di fuori funziona tutto correttamente. Ho un disperato bisogno di aiuto su queste domande:

  • E 'possibile ottenere manualmente il cordova?
  • Come avviare il servizio con startForeground, ma ancora innescare il cordova dispositivo pronto dopo aver ucciso e riavviare l'applicazione

Edit:

Dopo aver fatto due progetti di esempio veloce, uno a Cordova 3.6 (la versione che sto usando per la mia app effettiva) e con Cordova 5.1, mi sono reso conto che il problema è non nella nuova versione di Cordova. Comunque io non voglio davvero di aggiornare, in quanto:

  • Non toccare mai un sistema in esecuzione
  • Non so che cosa potrebbe non funzionare più nella versione mai, come ho installato molti plugin nel mio app .
  • Sono pigro.

Qualche idea di cosa potrebbe essere cambiato da 3.6 a 5.1 che ha risolto il bug e se potevo aggiornare il mio codice 3.6 di conseguenza?

Edit2:

Questo non è un duplicato di this question. Il callback deviceReady è stato trasmesso erroneamente in questa domanda. Questo non è il caso nella mia app, e non avrebbe senso funzionare solo quando non uso startForeground nel mio servizio.

+1

puoi modificare la tua domanda e fornire il codice JAVA (il codice del plugin). –

+1

Non importa (sicuro al 99,9%), come posso chiamare qualsiasi Plugin che voglio e l'errore rimane lo stesso. –

+0

Solo un semplice suggerimento: se hai ancora il problema (credo che tu abbia trovato una soluzione), il tuo parametro 'useCapture' è impostato su' false' alla fine dell'ascolto dell'evento: 'addEventListener ('deviceready', onDeviceReady, false)? –

risposta

-1

Quando il JS non è scritto all'interno del callback onDeviceReady() evento - o l'Cordova WebView viene ricaricato, quando Device è già in stato di "pronto" - in questo caso solo l'evento onDocumentReady() verrà attivato un altro tempo.

provare a configurare un caso di test che registra quando quale evento viene attivato; la differenza tra Device & Document Pronto potrebbe essere il colpevole. registrazione dettagliata degli eventi JS & Logcat suggerito.

potrebbe essere necessaria per associare gli eventi JS diversamente o spostare il codice tra di loro, al fine di evitare la situazione, che sembra essere: per ricaricare una WebView quando il Device è "pronto", possibilmente qualche tipo di implementazione tentativo, che funziona contro il concetto di avere un'app JS in esecuzione all'interno di un'implementazione WebView? Senza aver visto il codice meno (è piuttosto ovvio che questo "esempio" non funzionerà, mentre ci sono riferimenti non funzionanti), suppongo che lo Service sia già in esecuzione, mentre l'App non può avviarlo.

Questo potrebbe essere un funzionale example di ciò che si sta tentando di archiviare.

Mentre la versione corrente di Cordova è piuttosto 7.0 di 5.1.

+0

Al momento della stesura della domanda la versione corrente era 5.1 :) Sono molto fiducioso che il nostro codice non è il problema, dal momento che il problema sembra essere risolto con l'aggiornamento cordova, quindi indica un bug nella versione precedente di cordova. –

+0

@MichaelKunst Sono fiducioso, non capisci l'ordine degli eventi DOM ... grazie per il down-vote - non tenteremo mai più di aiutarti, con te con le tue domande noob. –

1

Sembra che tu abbia un problema relativo al ciclo di vita delle tue app. Quando si fa scorrere o si chiude forzatamente l'app, il processo delle app viene ucciso, quindi al riavvio se non si sono salvati oggetti dipendenti o variabili nel pacchetto di stato, ritorneranno come nulli perché l'attività presuppone che tali elementi siano disponibili. Puoi incollare il codice che hai nel onCreate() e indovinare quale è il tuo cordova di definizione.

Problemi correlati