2009-10-25 1 views
4

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

- (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?

+0

После прекращения обновления убедитесь, что ваш менеджер местоположений освобожден. Восстановите его, если вам нужно снова начать обновление. Это будет означать, что ваша точность снова начнется плохо, но приложение сможет быстрее закрыть оборудование. –

ответ

5

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

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

+0

Вторичный. Вы уверены, что этот звонок происходит? –

+0

Да, я протестировал его в отладчике и остановилUpdatingLocation вызывается после того, как self.locations.count достигает 4. –

0

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

0

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

+0

Да, я протестировал его в отладчике и остановилUpdatingLocation вызывается после того, как self.locations.count достигнет 4. –

3

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

[locationManager stopUpdatingLocation]; 
locationManager.delegate=nil; 

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

+0

И для запуска менеджер местоположений, просто добавьте этот код - [self.locationManager startUpdatingLocation]; self.locationManager.delegate = self; –

0

Со мной это был экземпляр моей карты, показывающий местоположение пользователя, в котором находился 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; 
} 
3

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

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

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

Смежные вопросы