2015-10-13 2 views
31

Est-il possible d'exécuter un service d'arrière-plan si je ferme mon application Ionic/Cordova (à la fois pour iOS et Android)?Obtenir l'emplacement dans l'application Ionic/Cordova en arrière-plan

Aux fins que je pris que pluging https://github.com/katzer/cordova-plugin-background-mode

Jusqu'à présent, j'ai ce code:

$ionicPlatform.ready(function() { 
      cordova.plugins.backgroundMode.isEnabled(); 

      cordova.plugins.backgroundMode.configure({ 
       silent: true 
      }) 
       ............ 
      ///do some task 
)} 

Il fonctionne très bien si l'application va au premier plan, mais dès que je ferme l'application de la tâche Je cours aussi des arrêts. Y a-t-il une solution de contournement/moyen de faire fonctionner ma tâche même si l'application est fermée?

EDIT:

J'ai également ajouté des autorisations pour les deux iOS et Andorid mais je reçois le même résultat.

EDIT 2:

Qu'est-ce que j'essaie de faire en arrière-plan est d'écrire ma propre mise en œuvre du service important lieu de changement car il n'y a pas de plug-in gratuit pour Cordova ou PhoneGap qui peut fonctionner avec iOS et Android.

+1

Avez-vous une solution? – Muhsin

+0

Avez-vous obtenu une solution?, Même ici à la recherche de quelque chose – Nico

Répondre

13

Ionic Framework

J'ai récemment mis en œuvre une fonction comme celui-ci dans mon projet. J'ai utilisé Ionic et j'ai utilisé le mode d'arrière-plan du plugin Cordova de Katzer. (maintenant je cours le processus d'arrière-plan à travers le simulateur iOS 9.2).

Voici un extrait de code pour le faire fonctionner:

// Run when the device is ready 
document.addEventListener('deviceready', function() { 

    // Android customization 
    // To indicate that the app is executing tasks in background and being paused would disrupt the user. 
    // The plug-in has to create a notification while in background - like a download progress bar. 
    cordova.plugins.backgroundMode.setDefaults({ 
     title: 'TheTitleOfYourProcess', 
     text: 'Executing background tasks.' 
    }); 

    // Enable background mode 
    cordova.plugins.backgroundMode.enable(); 

    // Called when background mode has been activated 
    cordova.plugins.backgroundMode.onactivate = function() { 

     // Set an interval of 3 seconds (3000 milliseconds) 
     setInterval(function() { 

      // The code that you want to run repeatedly 

     }, 3000); 
    } 
}, false); 

Ionic Framework 2

Voici un ionique 2 exemple ES6 prêt:

// Import the Ionic Native plugin 
import { BackgroundMode } from 'ionic-native'; 

// Run when the device is ready 
document.addEventListener('deviceready',() => { 

    // Android customization 
    // To indicate that the app is executing tasks in background and being paused would disrupt the user. 
    // The plug-in has to create a notification while in background - like a download progress bar. 
    BackgroundMode.setDefaults({ 
     title: 'TheTitleOfYourProcess', 
     text: 'Executing background tasks.' 
    }); 

    // Enable background mode 
    BackgroundMode.enable(); 

    // Called when background mode has been activated 
    // note: onactive now returns an returns an observable that emits when background mode is activated 
    BackgroundMode.onactivate.subscribe(() => { 
      // The code that you want to run repeatedly 
    }); 
}, false); 
+0

Et cela fonctionne même si vous fermez complètement l'application? – radioaktiv

+0

Si vous fermez l'application comme dans "déplacer vers l'arrière-plan", cela fonctionnera. – 0x1ad2

+0

Et si la personne éteignait le téléphone (je veux dire un arrêt et un redémarrage complets), alors qu'est-ce que ça prendrait pour remettre votre code dans le jeu? Je sais que toutes les applications d'alarme atteignent cela. –

2

Je pense que le suivi de géolocalisation de fond que vous êtes essayer d'implémenter existe déjà comme un plugin cordova, il est appelé cordova-plugin-mauron85-background-geolocation.

Ce plugin est à la fois un service de géolocalisation de premier plan et de fond. Il s'agit bien plus de batterie et de données qu'html5 de géolocalisation ou de plugin de cordova-géolocalisation.

Il existe de nombreuses options de configuration, voir la page github ci-dessus.

0

Solution importation IONIC-3

les plugins

import { Platform } from 'ionic-angular'; 
import { BackgroundMode } from '@ionic-native/background-mode'; 

ajoutez dans le constructeur

constructor(private backgroundMode: BackgroundMode, private plt: Platform) { 
    this.initBackgroundMode(); 
} 

private initBackgroundMode() { 
    this.plt.ready().then(() => { 
     this.backgroundMode.setDefaults({ silent: true }); 
     this.backgroundMode.enable(); 
     if (this.plt.is("android")) { 
      this.backgroundMode.on('activate').subscribe(() => { 
       this.backgroundMode.disableWebViewOptimizations(); 
       // Custom code for updating the location 
       // or do similar functionality 
       // use timeout or interval accordingly to execute the functionality in loop 
      }); 
     } 
    }) 
}