Frage

Wer weiß, wie programmatisch iPhone GPS auszuschalten? Sobald ich die CLLocationManager verwenden drei liest meiner Lage zu bekommen stoppen Ich Lage wie im Code der Aktualisierung unter:

- (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];
}

Aber das scheint immer noch die GPS schaltet zu lassen, während die Benutzer verwenden meine App und ihre Batterie entleeren. Alles, was ich tun muß, ist der Lage dreimal gelesen, so dass ich eine genaue bekommen, und dann das GPS abgeschaltet. Weiß jemand, wie man das GPS mit Objective-C herunterzufahren?

War es hilfreich?

Lösung

stopUpdatingLocation gibt dem Standort-Manager zum Herunterfahren der Möglichkeit, die Hardware, aber es ist nicht garantiert. Es soll die Hardware herunterzufahren, wenn niemand sonst es braucht. In der Praxis scheint es zu funktionieren, wie man erwarten würde.

Ist es möglich, stopUpdatingLocation einfach nie wird aufgerufen? In Ihrem Snippet oben, sieht es nicht unvernünftig sein, dass der Code macht es nie zu diesem Anruf.

Andere Tipps

Ich frage mich, ob Sie eine zusätzliche Zeile benötigen, um es zu:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

den Standort-Manager zu beenden. Dies ist, was ich und viele Orte haben diese 2 Linien zusammen. Viel Glück.

Apple-docs sagt, dass Location-Manager GPS-Hardware schaltet sich aus, wenn Ihre Position Genauigkeit mehr als einen Kilometer:

  

Zum Beispiel für die gewünschte Genauigkeit einstellen Lage Ereignisse zu einem Kilometer den Standort-Manager bietet die Flexibilität, GPS-Hardware auszuschalten und verlassen sich ausschließlich auf die WiFi oder Zell Radios. Ausschalten GPS-Hardware kann zu erheblichen Energieeinsparungen führen.   Von CLLocation Klasse Referenzen

Bitte beachten Sie nur standart (nicht signifikant) Standortänderungen Tracking verwendet werden sollen.

Anwendungen von Drittanbietern sollen nicht Hardware-Einstellungen berühren, so werde ich Ihnen das nicht erraten können.

Die stopUpdateLocation Methode sollte die gewünschte Wirkung haben. Haben Sie versucht, ob es überhaupt aufgerufen wird (Sie können dies tun, indem Sie einen Haltepunkt an der Linie Einstellung).

Bei mir war es meine Karte Beispiel den Standort des Nutzers zeigt, der die GPS gehen gehalten. Könnte ein Tipp für jeden, der die vor allem ohne Erfolg versucht.

Hier ist meine stopGPS () Funktion:

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

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

   [locationManager stopMonitoringSignificantLocationChanges];
   [locationManager stopUpdatingHeading];
   [locationManager stopUpdatingLocation];
   locationManager.delegate = nil;
   locationManager = nil;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top