即使应用程序终止,iOS也会更新位置

时间:2015-03-01 00:58:53

标签: ios background cllocationmanager

我正在尝试更新用户位置,即使应用已终止。我添加了地图和背景模式 - >我的.plist的位置更新,我设置了一个本地通知,当位置更新时将触发该通知。但它永远不会被解雇。我在 AppDelegat.h

中有这个
@interface AppDelegate : UIResponder <CLLocationManagerDelegate>{
    CLLocationManager *locationManager;
}

AppDelegate.m

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager requestAlwaysAuthorization];
    [locationManager startMonitoringSignificantLocationChanges];
}

    - (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations {

 UILocalNotification *notification = [[UILocalNotification alloc]init];
notification.repeatInterval = NSDayCalendarUnit;
[notification setAlertBody:@"Location update!"];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[notification setTimeZone:[NSTimeZone  defaultTimeZone]];
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
    }

我在模拟器上使用高速公路驱动器测试此代码作为位置,但它不起作用。


修改

如果我将代码放在applicationDidEnterBackground下,授权请求会关闭它打开的第二个代码,因为我正在使用didFinishLaunchingWithOptions。我知道它跟踪位置24小时,因为即使应用程序终止也有GPS符号。


编辑2

在手机上测试后,代码正常运行。它唤醒已终止的应用程序并发送本地通知。它不适用于模拟器,但适用于现实生活(设备):)

1 个答案:

答案 0 :(得分:1)

看起来你正在使用CLLocationManagerDelegate的弃用函数:

-(void)locationManager:(CLLocationManager *)manager 
        didUpdateToLocation:(CLLocation *)newLocation 
        fromLocation:(CLLocation *)oldLocation { 
}

相反,你应该实现

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateLocations:(NSArray *)locations {
}