CLLocationManager不提示用户

时间:2010-07-29 03:03:08

标签: iphone cllocationmanager

我正在使用一种方法创建位置管理器(如果它不存在)并启动它。它会检查用户是否已禁用位置服务,并且除非提供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。)

1 个答案:

答案 0 :(得分:0)

用户不会收到另一条提示消息。这就是iPhone处理事物的方式。

您还必须区分:

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

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