Questions tagged «cllocationmanager»




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

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); } …


1
为什么requestWhenInUseAuthorization不会提示用户访问该位置?
用我的viewDidLoad方法 locationManager = [[CLLocationManager alloc]init]; // initializing locationManager locationManager.delegate = self; // we set the delegate of locationManager to self. locationManager.desiredAccuracy = kCLLocationAccuracyBest; [locationManager startUpdatingLocation]; if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) { [locationManager requestWhenInUseAuthorization]; } 并调用了请求,但未提示用户?为什么?

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 …
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.