iPhone отключить GPS с Objective-C - PullRequest
4 голосов
/ 25 октября 2009

Кто-нибудь знает, как программно отключить GPS на iPhone? Как только я использую CLLocationManager, чтобы получить три чтения моего местоположения, я прекращаю обновлять местоположение, как показано в коде ниже:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation
       fromLocation:(CLLocation *)oldLocation {

if((newLocation.horizontalAccuracy >  0.0f) &&
   (newLocation.horizontalAccuracy < 7000.0f) ){

    if(self.locations.count > 3){
        [self.locationManager stopUpdatingLocation];
    }
    [self.locations addObject:newLocation];
}

Но, похоже, это все еще оставляет GPS включенным, пока пользователи используют мое приложение и разряжают свою батарею. Все, что мне нужно сделать, это прочитать местоположение три раза, чтобы я мог получить точное чтение, а затем выключить GPS. Кто-нибудь знает, как отключить GPS с объективом-C?

Ответы [ 6 ]

5 голосов
/ 25 октября 2009

stopUpdatingLocation дает менеджеру местоположения возможность завершить работу оборудования, но это не гарантируется. Предполагается отключить оборудование, когда оно больше никому не нужно. На практике это работает так, как и следовало ожидать.

Возможно ли, что stopUpdatingLocation просто никогда не вызывается? В приведенном выше фрагменте кода не кажется необоснованным, что ваш код никогда не делает этого вызова.

3 голосов
/ 05 декабря 2012

В Apple docs говорится, что Location Manager отключит оборудование GPS, если точность определения местоположения превышает один километр:

Например, установка требуемой точности для событий местоположения в один километр дает менеджеру местоположения возможность отключать оборудование GPS и полагаться исключительно на WiFi или сотовые радиостанции. Отключение оборудования GPS может привести к значительной экономии энергии. Из CLLocation ссылки на классы

Имейте в виду, что вы должны использовать только стандартное (незначительное) отслеживание изменений местоположения.

3 голосов
/ 27 июля 2010

Интересно, нужна ли вам дополнительная строка для:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

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

0 голосов
/ 28 сентября 2012

Со мной, это был мой экземпляр карты, показывающий местоположение пользователя, который поддерживал работу GPS. Может быть подсказкой любому, кто попробует все вышеперечисленное без удачи.

Вот моя функция stopGPS ():

-(void) stopGPS
{
   NSLog(@"Stopgps");

   myMap.delegate = nil;
   myMap.showsUserLocation = NO;
   myMap = nil;

   [locationManager stopMonitoringSignificantLocationChanges];
   [locationManager stopUpdatingHeading];
   [locationManager stopUpdatingLocation];
   locationManager.delegate = nil;
   locationManager = nil;
}
0 голосов
/ 25 октября 2009

Метод stopUpdateLocation должен иметь желаемый эффект. Пробовали ли вы вообще вызывать его (вы можете сделать это, установив точку останова на линии).

0 голосов
/ 25 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...