2014-11-05 109 views
1

CLLocationManager有两种方法来请求权限:CLLocationManager:请求更高权限

requestWhenInUseAuthorization 
requestAlwaysAuthorization 

然而,这些方法做什么,如果目前的授权状态是其他什么比“kCLAuthorizationStatusNotDetermined”。我希望我的应用程序首先在应用程序正在使用时仅提示用户输入位置权限,如果用户采取需要的操作,则只请求更高的权限。问题是,当我尝试请求更高的权限时,授权状态已经确定,因此没有任何反应。是否有可能仍然提示用户提供更高的权限,而不必强制他们转到设置页面来更改权限?

谢谢!

回答

0

不,根据CLLocationManager文档,如果您已授予任何权限,则无法请求权限。这意味着您无法从WhenInUse更改为Always。当你第一次请求许可时,你必须决定你想要哪一个。

0

由于iOS 8的你有

NSLocationWhenInUseUsageDescription 

NSLocationAlwaysUsageDescription 

来管理Poject>信息文件的授权密钥和值会显示您的邮件。

+0

这些说明键是警报不会出现所必需的。我遇到的问题是,在用户允许InUseAuthorization后,即使已设置验证状态,因此即使设置了描述码,我也无法再请求AlwaysAuthentication。 – 2014-11-05 19:45:54

+0

对不起,我一定是迷路了,为什么你要求更高的权限,当用户已经允许你使用权限? – 2014-11-05 19:49:43

+0

对于我的应用程序,我有大多数用户在地图上查看别针,可以由其他用户放置。我根据用户离他们的距离来决定显示哪些针脚。 (因此,大多数用户只需要使用授权。)但是,有些用户可以将一个别针附加到自己身上,这会在移动时更改位置。为此,我需要AlwaysAuthentication,因为即使在应用程序关闭时,我也希望pin遵循它们,但大多数用户不需要此AlwaysAuthentication。 – 2014-11-05 19:57:15

0

Apple在文档和WWDC 2014视频中都非常清楚:您无法更改位置服务授权级别。一旦您的应用程序收到使用授权时,它无法获得始终授权。如果您的应用程序的任何功能需要始终授权,那么您应该从一开始就要求始终验证。