2010-07-29 75 views
1

我正在使用一种方法创建位置管理器(如果它不存在并启动它)。它检查用户是否禁用了位置服务,并且尊重该位置服务,除非BOOL被授予启动服务。该方法返回一个BOOL来指示服务已经启动或没有启动。CLLocation Manager不提示用户

这适用于第一次启动服务和提示用户。如果他们点击允许事情正常进行,并且如果他们点击不允许我提供手动输入位置的视图。

但是我希望用户能够改变他们对使用位置服务的想法,所以我有一个按钮让他们回到使用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; 
} 

(我的位置管理委托发布和如果接收到拒绝错误设置位置经理为零。)

+0

优秀的问题。我也有同样的问题。 – hop 2011-05-23 22:55:34

回答

0

的用户将不会收到另一个提示消息。它只是iPhone处理事物的方式。

您还需要区分:从设置应用程序

  • 用户关闭位置服务(该状态由+ (BOOL)locationServicesEnabled 方法返回)
  • 用户拒绝位置目前应用程式跟踪的使用( + (CLAuthorizationStatus)authorizationStatus方法返回当前状态)

我会检查这两种方法,并在情况下显示带有消息的alertview,关于停用的位置服务。