Работа с iOS Location Manager - PullRequest
1 голос
/ 30 ноября 2010

Я занимаюсь разработкой приложения, которое имеет много просмотров. Иногда в мое приложение пользователь попадает в представление, где он может запросить свою позицию, нажимая на кнопку. Я пытаюсь следовать руководящим указаниям Apple, чтобы запрашивать позицию пользователя, только если пользователь позволяет это сделать. Что я должен сделать, использовать следующий первый код в делегате приложения и объявить атрибут диспетчера местоположения в любом представлении, которое пользователь вызывает, передавая атрибут диспетчера местоположения в новое представление и из старого представления и запрашивая второй следующий код в любое время что пользователь нажимает кнопку, чтобы найти себя ?; или просто используйте второй код, объявляя атрибут диспетчера местоположения только в представлениях, которые позволяют получить местоположение пользователя с помощью кнопки, чтобы проверить, включены ли службы определения местоположения?

Первый фрагмент.

- (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 Ответ

1 голос
/ 30 ноября 2010

CoreLocation обработает все оповещения за вас.Если службы определения местоположения отключены и вы запрашиваете местоположение, CoreLocation покажет пользователю предупреждение с кнопкой, чтобы перейти непосредственно к Settings.app.

alt text

Если вы хотите узнать, какое приложение вы можете проверить для вызова делегата

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

Ошибка содержит код, который будет kCLErrorDenied, если пользователь не разрешит приложению использовать службы определения местоположения.

Кроме того, вы должны использовать CoreLocation, когда это необходимо пользователю.Нет необходимости проверять наличие служб определения местоположения при запуске, а издержки, связанные с несколькими CLLocationManager, практически отсутствуют.

...