iOS7 和 iOS 8 项定位服务

iOS7 and iOS 8 location services

我有一个应用程序,我想为其添加一些基于位置的功能。它同时支持 iOS 7 和 8,但我遇到了一些问题。

我只想在用户点击某个 viewController 上的某个按钮时请求位置权限。问题是权限请求会在应用程序启动后立即出现。更准确地说,在第一个 viewController 的 ViewWillAppear 和 ViewDidAppear 函数之间。

我之前尝试过的:

  1. 在 plist 中有 NSLocationWhenInUseUsageDescription 键(对于 iOS8)。 代码方面:

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.delegate = self;
    if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [self.locationManager requestWhenInUseAuthorization];
    }
    [self.locationManager startUpdatingLocation];
    
  2. 删除 plist 键 -> 这导致 iOS8 中的弹出窗口不再出现,但它仍然出现在 iOS7

目前,与 CoreLocation 相关的每一位代码都被注释掉了,我仍然看到对话框询问我的权限(仅限 iOS7)

我不知道我还能尝试什么,所以非常感谢任何一点帮助

这就是 iOS 7(及之前)的工作原理。您不负责授权对话框:系统负责。你不能让它出现;系统看到您正在使用 Core Location,会代表您呈现它。这正是 iOS 8 改变的那种事情。在iOS7中你所能做的就是查看定位服务是否打开以及你的应用程序是否已被授权。

好的,我发现了这个问题。 事实证明,第三方应用程序在应用程序打开后立即请求权限。 谢谢大家的回答。