我正在使用一种方法创建位置管理器(如果它不存在)并启动它。它会检查用户是否已禁用位置服务,并且除非提供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。)
答案 0 :(得分:0)
用户不会收到另一条提示消息。这就是iPhone处理事物的方式。
您还必须区分:
+ (BOOL)locationServicesEnabled
方法返回)+ (CLAuthorizationStatus)authorizationStatus
方法返回当前状态)我会检查这两种方法,并在案例中显示带有消息的警报视图,关于停用的位置服务。