【问题标题】:CLLocation Manager not prompting userCLLocation Manager 不提示用户
【发布时间】:2010-07-29 03:03:07
【问题描述】:

我正在使用一种方法来创建位置管理器,如果它不存在并启动它。它检查用户是否禁用了位置服务并尊重这一点,除非给出 BOOL 来启动服务。该方法返回一个 BOOL 来指示服务是否已启动。

这适用于启动服务并首次提示用户。如果他们点击允许一切正常进行,如果他们点击不允许,我会显示手动输入位置的视图。

但是,我希望用户能够改变他们对使用定位服务的想法,所以我有一个按钮可以让他们重新使用 GPS。它再次调用相同的函数,但这次忽略了用户的位置服务偏好。我相信这应该会提示用户再次允许/禁止,但我会立即收到 kCLDenied 错误代码。

基于http://developer.apple.com/iphone/library/documentation/UserExperience/Conceptual/LocationAwarenessPG/CoreLocation/CoreLocation.html#//apple_ref/doc/uid/TP40009497-CH2-SW11,我希望出现另一个用户提示,而不是立即出现错误。

- (BOOL)startLocationServices:(BOOL)ignorePrefs
{
//    
//    /*UNREVISEDCOMMENTS*/
//    
if (locationManager == nil)
{
    if ([CLLocationManager locationServicesEnabled] || ignorePrefs)
    {
        locationManager    =    [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
        [locationManager setDistanceFilter:10.0];
    }
    else
    {
        return NO;
    }
}
[locationManager startUpdatingLocation];
return YES;
}

(如果收到拒绝错误,我的位置管理器委托释放并将位置管理器设置为 nil。)

【问题讨论】:

  • 很好的问题。我有同样的问题。

标签: iphone cllocationmanager


【解决方案1】:

用户不会再收到提示信息。这只是 iPhone 处理事情的方式。

您还必须区分:

  • 用户从设置应用程序禁用定位服务(此状态由+ (BOOL)locationServicesEnabled 方法返回)
  • 用户拒绝使用当前应用的位置跟踪(+ (CLAuthorizationStatus)authorizationStatus 方法返回当前状态)

我会检查这两种方法,并在警报视图中显示有关已停用位置服务的消息。

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多