Hintergrundmodus kann gesondert aktiviert bzw. deaktiviert werden

This commit is contained in:
Sebastián Katzer 2013-10-09 11:40:06 +02:00
parent 68fa900cfb
commit 20cc5084f4
3 changed files with 62 additions and 20 deletions

View File

@ -11,7 +11,9 @@
#import <Cordova/CDVPlugin.h> #import <Cordova/CDVPlugin.h>
#import <CoreLocation/CoreLocation.h> #import <CoreLocation/CoreLocation.h>
@interface APPBackgroundMode : CDVPlugin @interface APPBackgroundMode : CDVPlugin {
BOOL _activated;
}
// Aktiviert den Hintergrundmodus // Aktiviert den Hintergrundmodus
- (void) activate:(CDVInvokedUrlCommand *)command; - (void) activate:(CDVInvokedUrlCommand *)command;

View File

@ -11,6 +11,8 @@
@interface APPBackgroundMode (PrivateMethods) @interface APPBackgroundMode (PrivateMethods)
// Registriert die Listener für die (sleep/resume) Events
- (void) observeLifeCycle:(CDVInvokedUrlCommand *)command;
// Aktiviert den Hintergrundmodus // Aktiviert den Hintergrundmodus
- (void) activateMode; - (void) activateMode;
// Deaktiviert den Hintergrundmodus // Deaktiviert den Hintergrundmodus
@ -22,6 +24,16 @@
@synthesize locationManager; @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 * @js-interface
* *
@ -49,6 +61,43 @@
*/ */
- (void) activateMode - (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) { if (!locationManager) {
locationManager = [[CLLocationManager alloc] init]; locationManager = [[CLLocationManager alloc] init];
}; };
@ -64,28 +113,14 @@
} }
/** /**
* @obj-c-interface * Beendet das Aktualisieren des Standpunktes.
*
* Deaktiviert den Hintergrundmodus.
*/ */
- (void) deactivateMode - (void) stopUpdatingLocation
{ {
if (locationManager) { if (locationManager) {
// Beendet das Aktualisieren des Standpunktes
[locationManager stopUpdatingLocation]; [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 @end

View File

@ -8,11 +8,14 @@
*/ */
var BackgroundMode = function () { var BackgroundMode = function () {
// Registriert die Listener für die (sleep/resume) Events
cordova.exec(null, null, 'BackgroundMode', 'observeLifeCycle', []);
}; };
BackgroundMode.prototype = { BackgroundMode.prototype = {
/** /**
* @public
*
* Aktiviert den Hintergrundmodus. * Aktiviert den Hintergrundmodus.
*/ */
activate: function () { activate: function () {
@ -20,9 +23,11 @@ BackgroundMode.prototype = {
}, },
/** /**
* @public
*
* Deaktiviert den Hintergrundmodus * Deaktiviert den Hintergrundmodus
*/ */
deactivate: function (badge) { deactivate: function () {
cordova.exec(null, null, 'BackgroundMode', 'deactivate', []); cordova.exec(null, null, 'BackgroundMode', 'deactivate', []);
} }
}; };