2015-10-13 23 views
31

Czy można uruchomić usługę w tle, jeśli zamykam aplikację Ionic/Cordova (zarówno dla systemu iOS, jak i Androida)?Uzyskać lokalizację w aplikacji Ionic/Cordova, gdy w tle

Dla celów wybrałem że pluging https://github.com/katzer/cordova-plugin-background-mode

tej pory mam tego kodu:

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

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

To działa dobrze, jeśli aplikacja wychodzi na pierwszy plan, ale jak tylko zamknąć aplikację zadanie Biegnę też. Czy istnieje również sposób obejścia problemu/sposób wykonania mojego zadania, nawet jeśli aplikacja jest zamknięta?

EDIT:

Dodałem także uprawnienia zarówno dla iOS i Andorid ale otrzymuję ten sam rezultat.

EDIT 2:

Co ja próbuje zrobić w tle jest napisać własny realizację istotnej usługi lokalizacji zmian, ponieważ nie ma darmowy plugin do Cordova lub PhoneGap, który może pracować zarówno z iOS i Android.

+1

Dostałeś jakieś rozwiązanie? – Muhsin

+0

Czy masz jakieś rozwiązanie ?, to samo tutaj szuka czegoś – Nico

Odpowiedz

13

Ionic Framework

I niedawno wprowadziła funkcję jak to w moim projekcie. Użyłem Ionic i użyłem trybu tła wtyczki Cordova z Katzer. (teraz przeprowadzam proces w tle za pomocą symulatora iOS 9.2).

Oto fragment kodu, aby to działa:

// 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

Oto Ionic 2 przykład ES6 gotowe:

// 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

A to działa, nawet jeśli całkowicie zamkniesz aplikację? – radioaktiv

+0

Jeśli zamkniesz aplikację jak w "przenieś do tła", będzie działać. – 0x1ad2

+0

Co się stanie, jeśli dana osoba wyłączy telefon (mam na myśli całkowite wyłączenie i ponowne uruchomienie), a następnie, co by było potrzebne, aby ponownie wprowadzić kod do gry? Wiem, że wszystkie aplikacje alarmowe to osiągają. –

2

myślę śledzenie tła geolokalizacji, że jesteś Próba wdrożenia już istnieje jako plugin cordova, nazywa się cordova-plugin-mauron85-background-geolocation.

Ta wtyczka jest usługą geolokalizacji pierwszego planu i tła. Jest o wiele bardziej wydajny pod względem baterii i danych niż geolokalizacja html5 lub wtyczka cordova-geolocation.

Istnieje wiele opcji konfiguracyjnych, patrz strona github połączona powyżej.

0

Obejście na jonowych 3

importu wtyczki

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

dodać w konstruktorze

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 
      }); 
     } 
    }) 
}