IOS8 CLLocationManager returns Null in background
in iOS8, when I put my app in back ground, CLLocationManager returns Null at location, I also cannot update location in background, nor can I make a requestAlwaysAuthorization
CLLocationManager *lm = [[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
lm.distanceFilter = kCLDistanceFilterNone;
[lm requestAlwaysAuthorization];
[lm startUpdatingLocation];
+3
source to share
2 answers
Following is the code to get location in background -
Enter text for NSLocationAlwaysUsageDescription in the plist file.
Select location settings in background from project settings -
AppDelegate.h
//
// AppDelegate.h
// LocationTest
//
// Created by Santu C on 28/05/15.
// Copyright (c) 2015 company. All rights reserved.
//
#import <UIKit/UIKit.h>
#import<CoreLocation/CoreLocation.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property(strong,nonatomic) CLLocationManager *locationManager;
@end
AppDelegate.m
//
// AppDelegate.m
// LocationTest
//
// Created by Santu C on 28/05/15.
// Copyright (c) 2015 company. All rights reserved.
//
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize locationManager;
#define CONST_TIME_INTERVAL 60.0
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self location];
// Override point for customization after application launch.
return YES;
}
-(void)location
{
NSLog(@"location called");
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
{
[self.locationManager requestAlwaysAuthorization];
}
#endif
[self.locationManager startUpdatingLocation];
}
- (void)startUpdatingLocation
{
NSLog(@"startUpdatingLocation called");
self.locationManager.delegate = self;
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"locationManager didUpdateLocations");
CLLocation *newLocation = (CLLocation *)[locations lastObject];
NSLog(@"dLongitude : %f", newLocation.coordinate.latitude);
NSLog(@"dLatitude : %f", newLocation.coordinate.longitude);
}
- (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.
[self startUpdatingLocation];
}
@end
Hope this helps you
+2
source to share
put code in viewDidLoad about CLLocationManger
CLLocationManager *lm = [[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
lm.distanceFilter = kCLDistanceFilterNone;
[lm requestAlwaysAuthorization];
[lm startUpdatingLocation];
The problem has been resolved.
+1
source to share