检查 locationServicesEnabled 始终返回 YES,无论手动拨动开关决定是不是启用了位置服务

Posted

技术标签:

【中文标题】检查 locationServicesEnabled 始终返回 YES,无论手动拨动开关决定是不是启用了位置服务【英文标题】:check for locationServicesEnabled always returns YES, Irrespective of manual toggle switch to decide if location services are enabled检查 locationServicesEnabled 始终返回 YES,无论手动拨动开关决定是否启用了位置服务 【发布时间】:2011-09-02 08:32:44 【问题描述】:
location = [[CLLocationManager alloc] init];
    location.desiredAccuracy = kCLLocationAccuracyBestForNavigation ;
    location.distanceFilter = 10 ;
    location.delegate=self;



    locationEnabledBool = [CLLocationManager locationServicesEnabled];

    if (locationEnabledBool ==NO) 
        UIAlertView *locationAlert = [[UIAlertView alloc] initWithTitle:@"Location Service Disabled" 
                                                        message:@"To re-enable, please go to Settings and turn on Location Service for this app." 
                                                       delegate:nil 
                                              cancelButtonTitle:@"OK" 
                                              otherButtonTitles:nil];
        [locationAlert show];
        [locationAlert release];

    
    else
        [location startUpdatingLocation];

locationEnabledBool 的值始终为YES,与是否启用定位服务无关。任何身体都可以帮忙吗?

【问题讨论】:

【参考方案1】:

而不是

if (locationEnabledBool == NO) 
    //give error message

试试

if ( [CLLocationManager locationServicesEnabled] ==NO || [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) 
    //give error message

我在链接上找到了这个。

Detecting whether location services are enabled for my app

【讨论】:

if ( [CLLocationManager locationServicesEnabled] == NO && [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied) //give error message 在第一个 [ 括号 ] 和 && 而不是 ||【参考方案2】:

当您测试此代码时,您需要确保在设备上测试它,而不仅仅是使用 ios 模拟器。

另外,我建议您仔细检查该设备上的设置,以确保设置的第一页上的定位服务显示为关闭

【讨论】:

感谢您的回复。我在设备上运行代码并检查位置服务在设置中是否显示关闭。而不是 if (locationEnabledBool ==NO) if (locationEnabledBool ==NO || ( [CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied)) 为我工作。

以上是关于检查 locationServicesEnabled 始终返回 YES,无论手动拨动开关决定是不是启用了位置服务的主要内容,如果未能解决你的问题,请参考以下文章

LocationServicesEnabled:API 已弃用

CLLocationManager locationServicesEnabled 开启但个别关闭

locationServicesEnabled 测试在 viewDidLoad 中被禁用时通过

检查 iOS 定位服务

使用 Objective-C 检查 GPS 信号

如何请求用户开启定位服务