Вопрос

Кто-нибудь знает, как программно отключить 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?

Это было полезно?

Решение

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

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

Другие советы

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

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

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

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

  

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

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

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

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

Со мной, это был мой экземпляр карты, показывающий местоположение пользователя, который поддерживал работу 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top