始终在位置不被请求

Posted

技术标签:

【中文标题】始终在位置不被请求【英文标题】:Always On Location Not Being Requested 【发布时间】:2014-10-20 13:58:20 【问题描述】:

我问这个是因为我有点困惑。我确实在Info.plist 中设置了NSLocationAlwaysUsageDescription,这是我正在运行的代码:

CLLocationManager *locMan = [[CLLocationManager alloc] init];
locMan.delegate = self;
if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedAlways)

    [locMan requestAlwaysAuthorization];


[locMan startUpdatingLocation];

我设置了一个断点并验证了它确实被调用了,但我没有在应用程序中收到警报。我检查了我的隐私设置,并看到该应用程序有一个带有两个选项的条目:无和始终,都没有选中。我尝试卸载、清理和重新安装,但仍然无法正常工作。有什么想法吗?

编辑: 我将上面的块从viewDidLoad 移动到viewDidAppear:,现在警报出现并在半秒后消失

【问题讨论】:

【参考方案1】:

我解决了我的问题。是留存问题。我在本地声明了我的CLLocationManager,所以当它到达我的方法的末尾时,它就不再存在了,这就解释了为什么它不能请求许可。我将它推广为一个属性,现在一切正常

【讨论】:

【参考方案2】:

您需要在代码末尾添加这一行

[self.locationManager startUpdatingLocation];

【讨论】:

【参考方案3】:

如果你试试这个呢:

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;

if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) 
    [locationManager requestWhenInUseAuthorization];


[locationManager startUpdatingLocation];

抱歉,误读了您的帖子。也许试试这个:

CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusDenied) 
    // Show alert or something

else if (status == kCLAuthorizationStatusNotDetermined) 
    [self.locationManager requestAlwaysAuthorization];

更多内容可以在这里阅读:Core Location Manager Changes in ios 8

【讨论】:

以上是关于始终在位置不被请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 应用程序中强制“始终”访问位置

友人帮忙实现一个js效果,让一个DOM不管滚动条如何移动始终在窗口的固定位置,

在 Swift 中请求用户位置

FusedLocationApi.getLastLocation 在后台始终为空

如何将核心位置重置为 ASK 以获得在 swiftUI 中请求位置的权限?

iOS 11 中的位置访问请求