Buscar..


Sintaxis

  1. la exactitud deseada
  2. distanciafiltro
  3. requestLocation ()
  4. startUpdatingLocation ()
  5. allowDeferredLocationUpdates (untilTraveled: timeout :)
  6. startMonitoringSignificantLocationChanges ()
  7. allowDeferredLocationUpdates (untilTraveled: timeout :)
  8. autorizadosiempre
  9. autorizado
  10. locationManager (_: didChangeAuthorization :)

Observaciones

Simular una ubicación en tiempo de ejecución

  1. Ejecuta la aplicación desde Xcode.
  2. En la barra de depuración, haga clic en el botón "Simular ubicación".
  3. Elija una ubicación en el menú.

Simular ubicación - depurar

Vinculación de 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

Ubicación cuando está en uso Cuadro de diálogo de 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.

introduzca la descripción de la imagen aquí


Obtener permiso de servicio de ubicación siempre

introduzca la descripción de la imagen aquí

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.

introduzca la descripción de la imagen aquí

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 .

Modos de fondo

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow