2015-05-20 3 views
0

Я создал представление. В представлении я выполнял функцию - измерение расстояния от пользователя до маркера на карте. Но когда пользователь поворачивает приложение, остается предупреждение о том, что мое приложение использует геолокацию. Как удалить предупреждение? Я пытаюсь остановить геолокацию, когда пользователь поворачивает приложение. Я нашел этот метод: applicationWillEnterForeground. Но очень немногие его примеры. Я пытаюсь сделать что-то вроде этогоstop location when hide app

if(&UIApplicationWillEnterForegroundNotification) { //needed to run on older devices, otherwise you'll get EXC_BAD_ACCESS 
    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 
    [notificationCenter addObserver:self selector:@selector(enteredForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; 
} 

Однако этот код оставляет предупреждение, он выключает предупреждение только при нажатии на нее. Скажите, как я могу остановить местоположение, когда приложение скрыто?

PS в info.plist я добавить

<key>NSLocationWhenInUseUsageDescription</key> 
<string></string> 

это пример предупреждения

enter image description here

часть моего кода

-(void)setupArray{ 
    self.myLocationManager = [[CLLocationManager alloc] init]; 
    self.myLocationManager = [[CLLocationManager alloc] init]; 
    [self.myLocationManager startUpdatingLocation]; 
    self.myLocationManager.delegate = self; 
    [self.myLocationManager startUpdatingLocation]; 
    CLLocation *startLocation = self.myLocationManager.location; 
    CLLocation *location = [[CLLocation alloc] initWithLatitude:60.050043 longitude:30.345783]; 
    float betweenDistance=[startLocation distanceFromLocation:location]; 
    [GMSServices provideAPIKey:@"###"]; 
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:59.93 longitude:30.35 zoom:9]; 
    mapView_ = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 
    mapView_.settings.compassButton = YES; 
    mapView_.settings.myLocationButton = YES; 
    mapView_.myLocationEnabled = true; 
    mapView_.userInteractionEnabled = YES; 
    mapView_.frame = CGRectMake(0, 0, 200, 200); 
    mapView_.center = self.view.center; 
    [self.scrollView addSubview:mapView_]; 

UPDATE , если я пишу это is appdelegate

- (void)applicationWillResignActive:(UIApplication *)application { 
    NSLog("app hide"); //it's work 
} 

, но если я напишу это на мой взгляд, где я написал propety CCLocation, это не работает. Я не понимаю, где я должен ввести [myLocationManager stopUpdatingLocation];

ответ

1

Вы пытаетесь справиться с неправильным изменением состояния приложения - UIApplicationWillEnterForegroundNotification размещены, когда ваше приложение собирается стать активным, т.е. перечислит от фона на передний план. Используйте метод - applicationWillResignActive: в своем AppDelegate или подписаться на UIApplicationWillResignActiveNotification и остановите свои геолокационные услуги.

P.S. Ваш код обязательно нуждается в некоторой очистке, нет необходимости в self.myLocationManager = [[CLLocationManager alloc] init]; и [self.myLocationManager startUpdatingLocation]; нескольких вызовах. Вы также должны использовать символ подчеркивания перед именем переменной экземпляра - _mapView вместо mapView_. Удачи!

+0

Я знаю, что мой код не крут, это мое второе приложение. В AppDelegete мне нужно написать что-то вроде этого? - '(void) applicationWillResignActive: (приложение UIApplication *) { NSLog (@" applicationWillResignActive "); } ' – tarasikgoga

+1

Нет, вы должны вызвать метод' - stopUpdatingLocation' 'CLLocationManager'. Вы должны сделать это в том же классе, где у вас есть свойство 'myLocationManager'. С iOS 8 вы также можете запросить авторизацию «только на момент использования», поэтому, если вы не планируете поддерживать более старые версии iOS, вы можете просто выбрать это поведение и сэкономить некоторое время на чтение об уведомлениях, методах и кодировании в целом. –

+0

, пожалуйста, посмотрите на мой вопрос - я рассмотрю это – tarasikgoga