Pregunta

¿Alguien sabe cómo desactivar el GPS del iPhone mediante programación? Una vez que uso CLLocationManager para obtener tres lecturas de mi ubicación, dejo de actualizar la ubicación como se muestra en el siguiente código:

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

Pero esto todavía parece dejar el GPS encendido mientras los usuarios están usando mi aplicación y agotando su batería. Todo lo que necesito hacer es leer la ubicación tres veces para poder obtener una lectura precisa y luego apagar el GPS. ¿Alguien sabe cómo apagar el GPS con el objetivo-C?

¿Fue útil?

Solución

stopUpdatingLocation le da al administrador de ubicación la opción de apagar el hardware, pero no está garantizado. Se supone que apaga el hardware cuando nadie más lo necesita. En la práctica, parece funcionar como uno esperaría.

¿Es posible que nunca se llame a stopUpdatingLocation? En su fragmento de código anterior, no parece ser irrazonable que su código nunca llegue a esa llamada.

Otros consejos

Me pregunto si necesitas una línea adicional para llegar a:

[locationManager stopUpdatingLocation];
locationManager.delegate=nil;

para detener el administrador de ubicación. Esto es lo que uso y muchos lugares tienen estas 2 líneas juntas. Buena suerte.

Apple docs dice que el Administrador de ubicación apagará el hardware del GPS si la precisión de su ubicación es superior a un kilómetro:

  

Por ejemplo, establecer la precisión deseada para eventos de ubicación en un kilómetro le da al administrador de ubicación la flexibilidad para apagar el hardware de GPS y confiar únicamente en el WiFi o las radios celulares. La desactivación del hardware del GPS puede generar importantes ahorros de energía.   Desde referencias de clase CLLocation

Tenga en cuenta que solo debe usar el seguimiento de cambios de ubicación estándar (no significativo).

Las aplicaciones de terceros no deben tocar la configuración del hardware, así que supongo que no puedes hacer esto.

El método stopUpdateLocation debería tener el efecto deseado. ¿Has probado si se está llamando (puedes hacerlo configurando un punto de interrupción en la línea)?

Conmigo, fue mi instancia de mapa que muestra la ubicación del usuario la que mantuvo el GPS en marcha. Podría ser una sugerencia para cualquiera que intente todo lo anterior sin suerte.

Aquí está mi función stopGPS ():

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

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

   [locationManager stopMonitoringSignificantLocationChanges];
   [locationManager stopUpdatingHeading];
   [locationManager stopUpdatingLocation];
   locationManager.delegate = nil;
   locationManager = nil;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top