使用iOS位置管理器

时间:2010-11-30 13:38:04

标签: objective-c ios cllocationmanager

我正在开发一个有很多视图的应用。在我的应用程序中,用户有时会到达一个视图,在那里他可以通过点击按钮来询问他的位置。我试图按照Apple指南行仅询问用户位置(如果用户允许的话)。我该怎么办,将下一个代码用于app委托,并将位置管理器属性声明到用户调用的任何视图中,将位置管理器属性传递给新视图,并从旧视图传递并随时询问第二个下一个代码用户点击按钮找到自己?或者只使用第二个代码,仅将位置管理器属性声明为允许通过按钮获取用户位置的视图,以检查位置服务是否已启用?

第一个片段。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch.

    // Add the navigation controller's view to the window and display.
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];

    // Create a location manager instance to determine if location services are enabled. This manager instance will be
    // immediately released afterwards.
    CLLocationManager *manager = [[CLLocationManager alloc] init];
    if (manager.locationServicesEnabled == NO) {
        UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [servicesDisabledAlert show];
        [servicesDisabledAlert release];
    }
    [manager release];

    return YES;
}

第二个片段。

- (IBAction)locateUser:(id)sender {

    if([CLLocationManager locationServicesEnabled]) {
        self.locationManager = [[[CLLocationManager alloc] init] autorelease]; 
        self.locationManager.delegate = self;
    } else {
        [[[[UIAlertView alloc] initWithTitle:@"Location services." 
                                     message:@"Location services are disabled." 
                                    delegate:nil 
                           cancelButtonTitle:@"OK" 
                           otherButtonTitles:nil] autorelease] show];       
    }
}

感谢阅读。

1 个答案:

答案 0 :(得分:1)

CoreLocation将为您处理所有提醒。如果位置服务已停用且您要求提供该位置,则CoreLocation会向用户显示一条提示,告知用户直接转到Settings.app

alt text

如果您想知道附加什么,可以检查代表电话

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error

如果用户不让应用使用位置服务,则此处的错误包含kCLErrorDenied的代码。

此外,您应该在用户需要时使用CoreLocation。没有必要在启动时检查位置服务,并且多个CLLocationManager的开销几乎不存在。