OStack程序员社区-中国程序员成长平台

标题: 即使应用程序终止,iOS也会更新位置 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 05:31
标题: 即使应用程序终止,iOS也会更新位置

即使应用程序终止,我也会尝试更新用户位置。我向我的 .plist 添加了 map 和后台模式 --> 位置更新,并设置了一个本地通知,该通知将在位置更新时触发。但它从未被解雇。我在 AppDelegat.h 中有这个:

@interface AppDelegate : UIResponder <CLLocationManagerDelegate>{
    CLLocationManager *locationManager;
}

AppDelegate.m

- (BOOL)applicationUIApplication*)application didFinishLaunchingWithOptionsNSDictionary*)launchOptions {

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

    - (void)locationManagerCLLocationManager *)manager 
    didUpdateLocationsNSArray *)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

在我的手机上测试后,代码可以工作。它唤醒终止的应用程序并发送本地通知。它不适用于模拟器,但适用于现实生活(设备)



Best Answer-推荐答案


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

-(void)locationManagerCLLocationManager *)manager 
        didUpdateToLocationCLLocation *)newLocation 
        fromLocationCLLocation *)oldLocation { 
}

相反,您应该实现

- (void)locationManagerCLLocationManager *)manager 
    didUpdateLocationsNSArray *)locations {
}

关于即使应用程序终止,iOS也会更新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28788865/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4