SandeepM
SandeepM

Reputation: 2609

is it possible to track location even if application is not running

In an iPhone application, is it possible to track location and send it to the server even if the application that has permission to location is not running in the background.

Upvotes: 2

Views: 696

Answers (2)

Jason Lee
Jason Lee

Reputation: 3250

If the App is in the background, you can add a key-value pair in info.plist. The key is UIBackgroundModes and the value is like below :

enter image description here

Then do something in the background :

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

    UIDevice *device = [UIDevicecurrentDevice];
    BOOL backgroundSupported = NO;
    if ([device respondsToSelector:@selector(isMultitaskingSupported)]) {
        backgroundSupported = YES;
    }

    __blockUIBackgroundTaskIdentifier bgTaskId = [application beginBackgroundTaskWithExpirationHandler:^{
        [application endBackgroundTask:bgTaskId];
        bgTaskId = UIBackgroundTaskInvalid;
    }];

    if (backgroundSupported) {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            //
        });
    }
}

But if the app is not even in the background, viz, not in the memory, then what can the app do? The CPU would not run a line of code of the app.

Upvotes: 3

Ares
Ares

Reputation: 5903

This is possible — see this document for multitasking in general and this section of the Location Awareness Programming Guide for "Getting Location Events in the Background". Of course, all these talk about all of the various ways an iOS device can get your location (cell tower triangulation, Skyhook-style wifi network observation and GPS), not exclusive GPS.

In short, from reading those docs: add the UIBackgroundModes key into your info.plist, which is an array, and put the value 'location' into it. You'll then receive CLLocationManager updates even when in the background.

However, if you want to be nice to the battery then you're better off using the startMonitoringSignificantLocationChanges method on a CLLocationManager. Then you get suitably significant location updates even when in the background without being a full on background app. Other parts of the documentation state that a significant change is any change from one cell tower to another.

Upvotes: 5

Related Questions