iOS7 和 iOS 8 定位服务
Posted
技术标签:
【中文标题】iOS7 和 iOS 8 定位服务【英文标题】:iOS7 and iOS 8 location services 【发布时间】:2015-01-27 15:25:35 【问题描述】:我有一个应用程序,我想向它添加一些基于位置的功能。它同时支持 ios 7 和 8,但我遇到了一些问题。
我只想在用户点击某个 viewController 上的某个按钮时请求位置权限。问题是权限请求会在应用程序启动后立即出现。更准确地说,在第一个 viewController 的 ViewWillAppear 和 ViewDidAppear 函数之间。
我之前尝试过的:
在 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];
删除 plist 键 -> 这导致 iOS8 中的弹出窗口不再出现,但在 iOS7 中仍然出现
目前,与 CoreLocation 相关的每一段代码都已被注释掉,但我仍然会看到询问我权限的对话框(仅限 iOS7)
我不知道我还能尝试什么,所以非常感谢任何一点帮助
【问题讨论】:
在用户按下您想要的按钮之前,不要执行任何 CLLocationManager 代码。 【参考方案1】:这就是 iOS 7(及之前)的工作方式。您不负责授权对话框:系统负责。你不能让它出现;系统看到您正在使用核心位置,会代表您显示它。这正是 iOS 8 改变的地方。在 iOS 7 中,您所能做的就是查看位置服务是否已打开以及您的应用是否已获得授权。
【讨论】:
【参考方案2】:好的,我发现了这个问题。 事实证明,第三方应用程序会在应用程序打开后立即请求权限。 谢谢大家的回答。
【讨论】:
您是如何得知是哪个第三方请求了该位置?以上是关于iOS7 和 iOS 8 定位服务的主要内容,如果未能解决你的问题,请参考以下文章
为 iOS 7.1 编程并使用 UIAlertView,这是不是也适用于 iOS 8.0?