From 20cc5084f4fe01285bb5bbc4b40cce974590995c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastia=CC=81n=20Katzer?= Date: Wed, 9 Oct 2013 11:40:06 +0200 Subject: [PATCH] Hintergrundmodus kann gesondert aktiviert bzw. deaktiviert werden --- src/ios/APPBackgroundMode.h | 4 ++- src/ios/APPBackgroundMode.m | 69 ++++++++++++++++++++++++++++--------- www/background-mode.js | 9 +++-- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/src/ios/APPBackgroundMode.h b/src/ios/APPBackgroundMode.h index b039590..30e1480 100644 --- a/src/ios/APPBackgroundMode.h +++ b/src/ios/APPBackgroundMode.h @@ -11,7 +11,9 @@ #import #import -@interface APPBackgroundMode : CDVPlugin +@interface APPBackgroundMode : CDVPlugin { + BOOL _activated; +} // Aktiviert den Hintergrundmodus - (void) activate:(CDVInvokedUrlCommand *)command; diff --git a/src/ios/APPBackgroundMode.m b/src/ios/APPBackgroundMode.m index d1bfb20..fbac767 100644 --- a/src/ios/APPBackgroundMode.m +++ b/src/ios/APPBackgroundMode.m @@ -11,6 +11,8 @@ @interface APPBackgroundMode (PrivateMethods) +// Registriert die Listener für die (sleep/resume) Events +- (void) observeLifeCycle:(CDVInvokedUrlCommand *)command; // Aktiviert den Hintergrundmodus - (void) activateMode; // Deaktiviert den Hintergrundmodus @@ -22,6 +24,16 @@ @synthesize locationManager; +/** + * @js-interface + * + * Registriert die Listener für die (sleep/resume) Events. + */ +- (void) observeLifeCycle:(CDVInvokedUrlCommand *)command +{ + // Methode pluginInitialize wird aufgerufen, falls Instanz erstellt wurde +} + /** * @js-interface * @@ -49,6 +61,43 @@ */ - (void) activateMode { + _activated = true; +} + +/** + * @obj-c-interface + * + * Deaktiviert den Hintergrundmodus. + */ +- (void) deactivateMode +{ + _activated = false; +} + +/** + * Registriert die Listener für die (sleep/resume) Events und startet bzw. stoppt die Geo-Lokalisierung. + */ +- (void) pluginInitialize +{ + [self activateMode]; + + if (&UIApplicationDidEnterBackgroundNotification && &UIApplicationWillEnterForegroundNotification) { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startUpdatingLocation) name:UIApplicationDidEnterBackgroundNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(stopUpdatingLocation) name:UIApplicationWillEnterForegroundNotification object:nil]; + } else { + [self startUpdatingLocation]; + } +} + +/** + * Startet das Aktualisieren des Standpunktes. + */ +- (void) startUpdatingLocation +{ + if (_activated == false) { + return; + }; + if (!locationManager) { locationManager = [[CLLocationManager alloc] init]; }; @@ -64,28 +113,14 @@ } /** - * @obj-c-interface - * - * Deaktiviert den Hintergrundmodus. + * Beendet das Aktualisieren des Standpunktes. */ -- (void) deactivateMode +- (void) stopUpdatingLocation { if (locationManager) { + // Beendet das Aktualisieren des Standpunktes [locationManager stopUpdatingLocation]; }; } -/** - * Registriert die Listener für die (sleep/resume) Events und startet bzw. stoppt die Geo-Lokalisierung. - */ -- (void) pluginInitialize -{ - if (&UIApplicationDidEnterBackgroundNotification && &UIApplicationWillEnterForegroundNotification) { - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activateMode) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deactivateMode) name:UIApplicationWillEnterForegroundNotification object:nil]; - } else { - [self activateMode]; - } -} - @end \ No newline at end of file diff --git a/www/background-mode.js b/www/background-mode.js index 78f5241..0107061 100644 --- a/www/background-mode.js +++ b/www/background-mode.js @@ -8,11 +8,14 @@ */ var BackgroundMode = function () { - + // Registriert die Listener für die (sleep/resume) Events + cordova.exec(null, null, 'BackgroundMode', 'observeLifeCycle', []); }; BackgroundMode.prototype = { /** + * @public + * * Aktiviert den Hintergrundmodus. */ activate: function () { @@ -20,9 +23,11 @@ BackgroundMode.prototype = { }, /** + * @public + * * Deaktiviert den Hintergrundmodus */ - deactivate: function (badge) { + deactivate: function () { cordova.exec(null, null, 'BackgroundMode', 'deactivate', []); } };