我正在尝试更新用户位置,即使应用程序终止也是如此。我在.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];
    }

我在模拟器上以Freeway驱动器作为位置测试了此代码,但是它不起作用。

编辑

如果我将代码放在applicationDidEnterBackground下,则授权请求将在第二次关闭时关闭,因为我使用的是didFinishLaunchingWithOptions。我知道它的追踪位置是24小时,因为即使应用程式终止,也有GPS符号。

编辑2

在我的手机上对其进行测试后,代码即可正常工作。它唤醒终止的应用程序并发送本地通知。它在模拟器上不起作用,但可以在现实生活中使用(设备):)

最佳答案

看来您正在使用CLLocationManagerDelegate的不赞成使用的功能:

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

相反,您应该实施
- (void)locationManager:(CLLocationManager *)manager
    didUpdateLocations:(NSArray *)locations {
}

10-07 12:20
查看更多