回答
您无法直接访问该警报。
如果用户按下“不允许”,或者如果该应用程序无权使用位置服务,则CLLocationManager
将在其代表上呼叫locationManager:didFailWithError:
。错误域将为kCLErrorDomain
,错误代码为kCLErrorDenied
。
在启动位置管理器之前,您还应该检查用户是否允许为您的应用提供位置服务。使用CLLocationManager
类方法locationServicesEnabled
进行检查。
这里的DOC:
locationServicesEnabled
返回一个布尔值指示是否位置服务在设备上启用。
+ (BOOL)locationServicesEnabled
返回值 是如果位置服务启用或NO,如果他们不。
讨论 用户可以通过切换设置>常规>位置服务中的开关,从“设置”应用程序完全启用或禁用位置服务。
您应该在开始位置更新之前检查此方法的返回值,以确定用户是否为当前设备启用了位置服务。如果此方法返回NO,并且始终启动位置更新,则Core Location框架会提示用户使用确认面板询问是否应重新启用位置服务。
这有点危险,因为这会确定位置服务是打开还是关闭,所以用户可以打开定位服务,但是专门关闭您的应用。 – RickiG 2011-08-01 16:58:27
这并不危险,事实上Apple建议在启动位置管理器之前检查位置服务是否已启用(请参阅文档中的LocateMe示例代码)。这是首先要检查的。您还应该在代理中检查kCLErrorDenied。 – 2011-08-01 20:44:46
我有点含糊,对不起。我的意思是不仅仅依赖于[CLLocationManager locationServicesEnabled],因为用户可能通常打开位置服务,但是关闭您的应用:) – RickiG 2011-08-02 09:41:05
你可以简单地得到行动选择如下图所示:
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
[self addRegion];
}
else if (status == kCLAuthorizationStatusDenied) {
NSLog(@"Location access denied");
}
}
确保设置位置管理的委托。
谢谢完美的解决方案.. – 2015-12-08 09:38:22
- 1. iOS中的位置服务
- 2. 保存在服务器上的位置的接近警报
- 3. Appium 1.6 Android。 :位置警报
- 4. 角度2警报服务
- 5. iOS中的ALAssetsLibrary和位置服务6
- 6. 位置服务权限未保存iOS
- 7. iOS CLLocationManager打开位置服务
- 8. iOS 8中破解的位置服务
- 9. iOS本地警报
- 10. 如何在地理位置服务被拒绝时添加警报?
- 11. 检查iOS是否通过应用程序显示系统警报的可靠方法? (如位置服务等)
- 12. 当位置服务被ios关闭时获取位置数据
- 13. 警报不会显示位置
- 14. Javascript timed弹出警报与位置.href
- 15. jQuery警报箱固定位置问题?
- 16. Angularjs回报$位置URL
- 17. Android重复报警或服务?
- 18. 在android中启动报警服务
- 19. Android - 立即启动报警服务?
- 20. Android:警报和意图服务
- 21. 为Web服务器生成SCOM警报
- 22. Android报警和服务触发器
- 23. TFS服务器端项目警报
- 24. 安卓服务和“警报窗口”
- 25. 显示网络服务里面警报
- 26. 带有位置监听器回调的Android服务
- 27. 调用Web服务:javax.net.ssl.SSLException:收到致命警报:protocol_version
- 28. AngularJS服务回报状态
- 29. 当前位置靠近销位置时显示警报视图
- 30. 检查iOS定位服务
这是一个很好的提示,但我发现在我得到这个回调之前显示了警报,甚至是didChangeAuthorizationStatus回调。还有什么我可以做的吗? – elsurudo 2012-08-20 18:52:12
@elsurudo,你现在可能已经想通了,但是对于记录来说,只要在CLLocationManager上启动位置更新,Apple就会显示该警报。如果您想直观地告诉用户为什么您要让系统请求他们的位置,则需要为此创建自己的用户界面,并避免启动位置管理器,直到确定用户已轻按或滑动你的UI。 – clozach 2013-02-01 01:40:23