不允许位置服务时,我可以访问核心位置 api 吗?

Posted

技术标签:

【中文标题】不允许位置服务时,我可以访问核心位置 api 吗?【英文标题】:Can I access to core location api when location service is not allowed? 【发布时间】:2011-12-12 04:11:39 【问题描述】:

我想在我的应用中搜索当前位置,但我看到整个位置服务都不允许。

@interface LoginViewController : UIViewController <CLLocationManagerDelegate>

    CLLocationManager* locationManager;
    CLLocation* currentLocation;
 //header file

//implementation header file
(void)loginButtonPressed:(id)aSender

    if (locationManager == nil)
    
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        locationManager.distanceFilter = kCLDistanceFilterNone;
                

    [locationManager startUpdatingLocation];


//implementation CLLocationManagerDelegate
(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
    fromLocation:(CLLocation *)oldLocation

    NSLog(@"update location");
    if(self.currentLocation == nil)
    
        self.currentLocation = newLocation;
        [locationManager stopUpdatingLocation];
    


(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

    NSLog(@"fail with error");
    [locationManager stopUpdatingLocation];
    self.currentLocation = nil;

locationManager调用startUpdatingLocation时(假设不允许定位服务),locationManager无法获取当前位置,调用didFailWithError: method。 在我的情况下,locationManagerios5 上什么都不调用,但在 iOS4 上调用 didFailWithError: method。我不知道是我的错。

【问题讨论】:

【参考方案1】:

不,在开始任何位置更新之前,您应该始终检查是否允许位置监控。如果用户更改了他们对您的应用的偏好,您将只会收到错误消息,而不是实际的位置更新。

您应该检查位置更新是否可用,如果没有,请通知用户他们需要为您的应用重新启用位置服务才能使其正常工作。

【讨论】:

感谢您的建议。在 locationManager 开始调用 startUpdatingLocation 方法之前,它必须检查 CLLocationManager 的状态。所以 if 语句中的条件改为这样 [CLLocationManager locationServicesEnabled]

以上是关于不允许位置服务时,我可以访问核心位置 api 吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android Java Google API 应用程序在允许位置访问时崩溃,但在拒绝位置时没有问题......? [复制]

是否可以在不启动核心定位的情况下向用户询问当前位置

用户允许访问后如何使用浏览器地理位置

即使在终止应用程序后,我们还能获取位置信息吗? [关闭]

获取位置数据并在后台发送到服务器

android检查位置服务启用播放服务位置api