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