1

我正在使用一种方法来创建位置管理器,如果它不存在并启动它。它检查用户是否禁用了位置服务并尊重这一点,除非给出 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。)

4

1 回答 1

0

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

您还必须区分:

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

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

于 2011-05-29T07:48:52.783 回答