iOS
Ubicación del núcleo
Buscar..
Sintaxis
- la exactitud deseada
- distanciafiltro
- requestLocation ()
- startUpdatingLocation ()
- allowDeferredLocationUpdates (untilTraveled: timeout :)
- startMonitoringSignificantLocationChanges ()
- allowDeferredLocationUpdates (untilTraveled: timeout :)
- autorizadosiempre
- autorizado
- locationManager (_: didChangeAuthorization :)
Observaciones
Simular una ubicación en tiempo de ejecución
- Ejecuta la aplicación desde Xcode.
- En la barra de depuración, haga clic en el botón "Simular ubicación".
- Elija una ubicación en el menú.
Link CoreLocation Framework
Importe el módulo CoreLocation en sus clases que usen la funcionalidad CoreLocation.
//Swift
import CoreLocation
//Objective-C
#import <CoreLocation/CoreLocation.h>
Solicitar permiso para usar los servicios de localización
Verifique el estado de autorización de la aplicación con:
//Swift
let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus()
//Objective-C
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
Probar el estado contra las siguientes constantes:
//Swift
switch status {
case .NotDetermined:
// Do stuff
case .AuthorizedAlways:
// Do stuff
case .AuthorizedWhenInUse:
// Do stuff
case .Restricted:
// Do stuff
case .Denied:
// Do stuff
}
//Objective-C
switch (status) {
case kCLAuthorizationStatusNotDetermined:
//The user hasn't yet chosen whether your app can use location services or not.
break;
case kCLAuthorizationStatusAuthorizedAlways:
//The user has let your app use location services all the time, even if the app is in the background.
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
//The user has let your app use location services only when the app is in the foreground.
break;
case kCLAuthorizationStatusRestricted:
//The user can't choose whether or not your app can use location services or not, this could be due to parental controls for example.
break;
case kCLAuthorizationStatusDenied:
//The user has chosen to not let your app use location services.
break;
default:
break;
}
Obtención del permiso de servicio de ubicación mientras la aplicación está en uso
El método más simple es inicializar el administrador de ubicación como una propiedad de su controlador de vista raíz y colocar la solicitud de permiso en su viewDidLoad
.
Esto muestra el controlador de alerta que solicita permiso:
//Swift
let locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
//Objective-C
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
Agregue la clave NSLocationWhenInUseUsageDescription a su Info.plist . El valor se utilizará en la etiqueta de message
del controlador de alerta.
Obtener permiso de servicio de ubicación siempre
Para solicitar permiso para usar los servicios de ubicación incluso cuando la aplicación no está activa, use la siguiente llamada en su lugar:
//Swift
locationManager.requestAlwaysAuthorization()
//Objective-C
[locationManager requestAlwaysAuthorization];
Luego, agregue la clave NSLocationAlwaysUsageDescription a su Info.plist . De nuevo, el valor se utilizará en la etiqueta de message
del controlador de alerta.
Agrega tu propia ubicación personalizada usando el archivo GPX
Para verificar los servicios de ubicación necesitamos un dispositivo real, pero para propósitos de prueba también podemos usar el simulador y agregar nuestra propia ubicación siguiendo los pasos a continuación:
- Agrega un nuevo archivo GPX a tu proyecto.
- en el archivo GPX agregar puntos de paso como
<?xml version="1.0"?>
<gpx version="1.1" creator="Xcode">
<!--
Provide one or more waypoints containing a latitude/longitude pair. If you provide one
waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
Xcode will simulate a route visitng each waypoint.
-->
<wpt lat="52.599878" lon="4.702029">
<name>location name (eg. Florida)</name>
</wpt>
- luego vaya a producto -> Esquema -> Editar esquema y en RUN, establezca la ubicación predeterminada como su nombre de archivo GPX.
Servicios de localización en el fondo
Para usar los servicios de ubicación estándar mientras la aplicación está en segundo plano, primero debe activar los Background Modes
en la pestaña Capacidades de la configuración de Destino y seleccionar Location updates
.
O, agréguelo directamente al Info.plist.
<key>NSLocationAlwaysUsageDescription</key>
<string>I want to get your location Information in background</string>
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
Entonces necesitas configurar el CLLocationManager
C objetivo
//The Location Manager must have a strong reference to it.
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
//Request Always authorization (iOS8+)
if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[_locationManager requestAlwaysAuthorization];
}
//Allow location updates in the background (iOS9+)
if ([_locationManager respondsToSelector:@selector(allowsBackgroundLocationUpdates)]) {
_locationManager.allowsBackgroundLocationUpdates = YES;
}
[_locationManager startUpdatingLocation];
Rápido
self.locationManager.delegate = self
if #available (iOS 8.0,*) {
self.locationManager.requestAlwaysAuthorization()
}
if #available (iOS 9.0,*) {
self.locationManager.allowsBackgroundLocationUpdates = true
}
self.locationManager.startUpdatingLocation()