Questions tagged «core-location»

这个专用于iOS和Mac OS X的专有Apple框架允许应用程序获取有关设备当前位置(纬度,经度以及某些设备上的海拔高度),方向和速度的信息。该框架还提供了用于监视区域并在设备进入和离开预定地理区域时得到通知的方法。

14
如何在iOS应用程序中每n分钟获取一次后台位置更新?
我正在寻找一种方法来在我的iOS应用程序中每隔n分钟获取一次后台位置更新。我正在使用iOS 4.3,该解决方案应适用于非越狱iPhone。 我尝试/考虑了以下选项: CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges:此操作基于配置的属性,可在预期的后台运行,但是似乎无法强制每n分钟更新一次位置 NSTimer:当应用程序在前台运行时可以工作,但似乎不是为后台任务而设计的 本地通知:可以每n分钟安排一次本地通知,但是无法执行一些代码来获取当前位置(无需用户通过通知启动应用程序)。这种方法似乎也不是一种干净的方法,因为这不是通知的用途。 UIApplication:beginBackgroundTaskWithExpirationHandler:据我所知,当应用程序移至后台时,应使用此方法在后台完成一些工作(时间也受限制),而不是实施“长时间运行”的后台进程。 如何实施这些常规的后台位置更新?

11
当前位置权限对话框消失得太快
我的应用程序获取用户的位置,获取坐标,并提供往返于其目的地或起点的距离。所有这些可能的目标都显示在表格视图中,因此我在填充表格的同时获取了用户的坐标。唯一的事情是,询问用户位置的警报视图出现然后消失得如此之快,以至于无法单击它! 有什么方法可以在应用首次加载时手动显示此警报?我尝试在应用程序加载时获取用户的位置,以尝试强制显示警报,但这没有用。


3
终止/挂起时,重大更改位置API的行为?
这是CLLocationManager文档中的部分,描述了具有startMonitoringSignificantLocationChanges的应用行为: 如果启动此服务,并且随后终止了您的应用程序,则当新事件到来时,系统会自动将应用程序重新启动到后台。在这种情况下,传递给应用程序委托的application:didFinishLaunchingWithOptions:方法的选项字典包含键UIApplicationLaunchOptionsLocationKey,以指示由于位置事件而启动了您的应用程序。重新启动后,您仍然必须配置位置管理器对象并调用此方法以继续接收位置事件。当您重新启动位置服务时,当前事件将立即传递给您的委托。此外,甚至在您启动位置服务之前,位置管理器对象的location属性也会使用最新的位置对象进行填充。 因此,我的理解是,如果您的应用终止(并且假设您不从applicationWillTerminate调用stopMonitoringSignificantLocationChanges),您将被UIApplicationLaunchOptionsLocationKey参数唤醒:application:didFinishLaunchingWithOptions。此时,您将创建CLLocationManager,调用startMonitoringSignificantLocationChanges并在有限的时间内进行后台位置处理。因此,我对此表示满意。 上一段仅讨论终止应用程序时发生的情况,而没有建议您暂停应用程序时的操作。didFinishLaunchingWithOptions的文档说: 该应用程序在后台跟踪位置更新,已被清除,现在已重新启动。在这种情况下,词典包含一个键,该键指示由于发生新的位置事件而重新启动了该应用程序。 建议您终止应用程序后,仅在启动应用程序(由于位置更改)时才收到此呼叫。 但是,《位置感知编程指南》中有关“ 重要更改服务”的段落说明如下: 如果您使该服务保持运行状态,并且随后您的应用程序被挂起或终止,则当新的位置数据到达时,该服务会自动唤醒您的应用程序。唤醒时,您的应用程序将被置于后台,并留出少量时间来处理位置数据。因为您的应用程序在后台,所以它应该做的工作最少,并且避免任何可能阻止其在分配的时间到期之前返回的任务(例如查询网络)。否则,您的应用程序可能会终止。 这表明如果您的应用已被暂停,则您将被位置数据唤醒,但未提及您如何被唤醒: UIApplicationDelegate是否收到回调通知我正在从暂停状态恢复为后台状态? 位置管理器(在挂起应用程序时被冻干了)是否开始接收locationManager:didUpdateToLocation:fromLocation回调? 我是否只需要在didUpdateToLocation消息中实现代码即可检查应用程序状态,并在后台模式下进行最少的处理? 在撰写本文的过程中,我想我可能已经回答了我自己的问题,但是最好是由知识渊博的人来确认我的理解。

9
定期的iOS背景位置更新
我正在编写一个需要高精度和低频更新背景位置的应用程序。解决方案似乎是后台NSTimer任务,该任务启动位置管理器的更新,然后立即关闭。曾有人问过这个问题: 如何在iOS应用程序中每n分钟获取一次后台位置更新? 应用程序进入后台运行后每隔N分钟获取一次用户位置 iOS不是典型的后台位置跟踪计时器问题 iOS长期运行的背景计时器,带有“位置”背景模式 基于位置跟踪的iOS全职后台服务 但是我还没有一个起码的例子。在尝试了上述公认答案的所有排列之后,我提出了一个起点。输入背景: - (void)applicationDidEnterBackground:(UIApplication *)application { self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"ending background task"); [[UIApplication sharedApplication] endBackgroundTask:self.bgTask]; self.bgTask = UIBackgroundTaskInvalid; }]; self.timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self.locationManager selector:@selector(startUpdatingLocation) userInfo:nil repeats:YES]; } 和委托方法: - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { NSLog(@"%@", newLocation); NSLog(@"background time: %f", [UIApplication …


19
didFailWithError:错误域= kCLErrorDomain代码= 0“无法完成该操作。(kCLErrorDomain错误0。)”
我想获取当前位置,但出现错误。 这是我的视图控制器的片段。 - (void)viewDidLoad { self.locationManager = [[CLLocationManager alloc] init]; [locationManager setDelegate:self]; [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations { // I would get the latest location here // but this method never gets called } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"didFailWithError: %@", error); } …


11
在用户拒绝使用位置服务后,如何提示用户打开位置服务
我有一个具有显式用户交互的应用程序,该应用程序利用了用户的当前位置。如果用户拒绝访问位置服务,我仍然希望随后的使用提示用户进入设置并为我的应用重新启用位置服务。 我想要的行为是内置Maps应用的行为: 在设置>常规>重置>重置位置警告中重置位置警告。 启动地图应用。 点击左下角的当前位置按钮。 具有““地图”的地图提示将要使用您的当前位置“ | “不允许” | “允许”。 选择“不允许”选项。 再次点击左下角的当前位置按钮。 地图提示“打开位置服务以允许“地图”确定您的位置” | “设置” | “取消”。 在我自己的应用程序中,相同的基本流程导致我的CLLocationManagerDelegate -locationManager:didFailWithError:方法在最后一步被调用,并带有kCLErrorDenied错误,并且用户没有选择打开“设置”应用程序进行更正的选项。 我可以显示我自己的警报来响应该错误,但是它无法像操作系统内置的Maps应用所使用的警报那样启动“设置”应用。 我缺少的CLLocationManager类中有什么能够给我这种​​行为的吗?

12
iOS:应用在安装应用时未征求用户许可。每次获取kCLAuthorizationStatusNotDetermined-Objective-C和Swift
我正在尝试在我的iOS应用中获取用户位置。首先,我在项目中包含了corelocation框架。然后在一个按钮上单击“我正在调用核心位置api”,如下所示。当我尝试将其安装在设备中时,核心位置从不询问用户权限。当我尝试单击按钮获取位置时,我将kCLAuthorizationStatusNotDetermined定义为authorisationStatus。请帮助我。我不知道发生了什么事。 - (IBAction)fetchLessAccurateLocation:(id)sender { [self.txtLocation setText:@""]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; locationManager.distanceFilter = 1000; if ([self shouldFetchUserLocation]) { [locationManager startUpdatingLocation]; } } 这是我的shouldFetchUserLocation方法: -(BOOL)shouldFetchUserLocation{ BOOL shouldFetchLocation= NO; if ([CLLocationManager locationServicesEnabled]) { switch ([CLLocationManager authorizationStatus]) { case kCLAuthorizationStatusAuthorized: shouldFetchLocation= YES; break; case kCLAuthorizationStatusDenied: { UIAlertView …

4
编译器错误:无效的库文件-CoreLocation
我有一个用Xcode 8创建的应用程序。我在该应用程序中使用了CoreLocation和MapKit。 我有最新的应用程序更新iOS到现在。而且工作正常。现在,我正在使用更新应用程序iOS 1。所以我打开了应用程序Xcode 11.0并更新了所有必需的代码。还更新了Xcode“执行更改”等建议的设置。 现在,我运行应用程序,但出现如下错误: Compiler error: Invalid library file。 我已经搜索了很多,但是找不到任何解决方案。这是新的Xcode还是新的错误iOS? 我需要做一些额外的更改或设置吗?请指导我。这是Apple已知的错误吗? 编辑: 2019-10-18 10:34:39.899827 + 0530 MapLocation [1697:57778]编译器错误:无效的库文件2019-10-18 10:34:39.900098 + 0530 MapLocation [1697:57778]编译器错误:无效的库文件2019- 10-18 10:34:39.915973 + 0530 MapLocation [1697:57778]编译器错误:无效的库文件2019-10-18 10:34:39.916228 + 0530 MapLocation [1697:57778]编译器错误:无效的库文件 2019-10-18 10:34:39.920608 + 0530 MapLocation [1697:57778]更新的坐标为:<+ 23.02055700,+ 72.50524900> +/- 5.00m(速度-1.00 mps /路线-1.00)@ 10/18/19 ,10:34:39 …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.