SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Introdução ao
Core Location para iOS
    5º	
  FastShow	
  Qualidata
            Felipe	
  Souto
            @felipesouto
Core Location
•   Framework para obtenção de dados de localização do
    usuário
        •   CLHeading (Bússola)

        •   CLLocation

        •   CLLocationManager

        •   CLLocationManagerDelegate (Protocol)

•   Disponível para dispositivos iOS (iPhone, iPad, iPod
    Touch) e Mac OS X
•   Não possui interface gráfica
•   MapKit: API para exibição de mapas
Core Location
• Não   permite acessar diretamente uma
  tecnologia de localização específica
• O foco é no uso dos dados de localização
Obtendo a localização
    Triangulação de torres de celular
        Não é muito precisa, mas gasta pouca energia



    Wi-Fi Positioning Service (WPS)
       Mais precisa do que a triangulação; gasta mais energia



    A-GPS (Assisted GPS)
       Muito precisa; gasta muita energia
Triangulação de torres
Wi-Fi Positioning
GPS
CLLocation
  • Objeto que contém informações sobre a última
      localização do dispositivo
//	
  Latitude	
  e	
  longitude
@property	
  CLLocationCoordinate2D	
  coordinate;

//	
  Altitude	
  em	
  metros.	
  Valor	
  negativo	
  significa	
  “abaixo	
  do	
  
nível	
  do	
  mar”
@property	
  CLLocationDistance	
  altitude;

//	
  Raio	
  da	
  incerteza	
  da	
  localização	
  (em	
  metros)
//	
  Valor	
  negativo	
  indica	
  dado	
  inválido
@property	
  CLLocationAccuracy	
  horizontalAccuracy;
@property	
  CLLocationAccuracy	
  verticalAccuracy;
CLLocation
//	
  Constantes	
  para	
  definir	
  precisão	
  da	
  localização
kCLLocationAccuracyBestForNavigation;	
  //	
  plugado	
  na	
  tomada
kCLLocationAccuracyBest;
kCLLocationAccuracyNearestTenMeters;
kCLLocationAccuracyHundredMeters;
kCLLocationAccuracyKilometer;
kCLLocationAccuracyThreeKilometers;

//	
  Direção	
  (graus)	
  do	
  dispositivo
//	
  Sentido	
  horário:	
  0	
  -­‐	
  Norte,	
  90	
  -­‐	
  Leste,	
  (...)
@property	
  CLLocationDirection	
  course;

//	
  Velocidade	
  instantânea	
  (m/s)
@property	
  CLLocationSpeed	
  speed;
CLLocation
//	
  Instante	
  em	
  que	
  a	
  localização	
  foi	
  determinada
@property	
  NSDate	
  timeStamp;

//	
  Distância	
  (em	
  metros)	
  entre	
  dois	
  CCLocations
-­‐	
  (CLLocationDistance)distanceFromLocation:(CLLocation	
  
*)location
CLLocationManager
•   Interface responsável por “entregar” as
    localizações
•   Tipos de Location Monitoring:
     •   Standard Location Service: updates contínuos baseados em
         precisão

     •   Significant-Change Location Service: updates somente
         quando mudanças “significativas” nas localizações ocorrerem
         (> iOS 4)

     •   Shape-Based Regions: updates baseados em regiões (> iOS 4)

     •   Heading monitoring
Utilização do CL
•   Checar se o hardware suporta o tipo de “Location
    Monitoring” desejado
•   Criar uma instância de CLLocationManager
•   Setar o seu delegate conforme o protocolo
    CLLocationManagerDelegate
•   Configurar propriedades relevantes (precisão,
    “frequência” de atualizações)
•   Iniciar o monitoramento de mudanças de localização
    (chamar startUpdatingLocation)
•   Para preservar energia, chamar stopUpdatingLocation
    assim que possível
Exemplo
-­‐	
  (void)viewDidLoad	
  {
      self.locationManager	
  =	
  [[CLLocationManager	
  alloc]	
  init];
      //	
  Delegate:	
  objeto	
  que	
  recebe	
  os	
  updates	
  de	
  localização
      locationManager.delegate	
  =	
  self;
      locationManager.desiredAccuracy	
  =	
  kCLLocationAccuracyBest;
      //	
  distanceFilter:	
  distância	
  mínima	
  horizontal	
  (em	
  metros)	
  
      para	
  o	
  recebimento	
  de	
  updates	
  de	
  localização
      //	
  kCLDistanceFilterNone:	
  notifica	
  sobre	
  todos	
  os	
  movimentos
      locationManager.distanceFilter	
  =	
  10;
      [locationManager	
  startUpdatingLocation];
}
                      kCLLocationAccuracyBestForNavigation;
                      kCLLocationAccuracyBest;
                      kCLLocationAccuracyNearestTenMeters;
                      kCLLocationAccuracyHundredMeters;
                      kCLLocationAccuracyKilometer;
                      kCLLocationAccuracyThreeKilometers;
CLLocationManagerDelegate

•   Não é usual pedir ao CLLocationManager por novas
    localizações
•   Abordagem padrão: Manager informa sobre updates via
    delegate
•   Quando uma classe implementa o protocolo (interface)
    CCLocationManagerDelegate, é “opcional” implementar
    dois métodos:
     •   locationManager:didUpdateToLocation:fromLocation:
     •   locationManager:didFailWithError:
Mudanças na localização
-­‐	
  (void)locationManager:(CLLocationManager	
  *)manager
	
   didUpdateToLocation:(CLLocation	
  *)newLocation
	
   fromLocation:(CLLocation	
  *)oldLocation	
  {
	
  
	
   if	
  (startingPoint	
  ==	
  nil)
	
   	
   self.startingPoint	
  =	
  newLocation;
	
  
         //	
  Exibir	
  a	
  latitude	
  em	
  um	
  label
	
   NSString	
  *latitudeString	
  =	
  [[NSString	
  alloc]	
  
initWithFormat:@"%gu00B0",
	
   	
   newLocation.coordinate.latitude];
	
   latitudeLabel.text	
  =	
  latitudeString;
	
   [latitudeString	
  release];
}
Notificações de Erros
Notificações de Erros

•   kCLErrorLocationUnknown:
    falha na localização (continue
    tentando!)

•   kCLErrorDenied: usuário se
    recusou a fornecer a localização
Notificações de Erros
-­‐	
  (void)locationManager:(CLLocationManager	
  *)manager	
  
didFailWithError:(NSError	
  *)error	
  {

    NSString	
  *errorType	
  =	
  (error.code	
  ==	
  kCLErrorDenied)	
  ?	
  
    @"Access	
  Denied"	
  :	
  @"Unknown	
  Error";

    //	
  Exibir	
  um	
  alert	
  com	
  a	
  mensagem	
  de	
  erro
    UIAlertView	
  *alert	
  =	
  [[UIAlertView	
  alloc]	
  
    initWithTitle:@"Error	
  getting	
  Location"
message:errorType	
  delegate:nil
cancelButtonTitle:@"Okay"	
  otherButtonTitles:nil];

    [alert	
  show];
    [alert	
  release];
}
Dúvidas?

Mais conteúdo relacionado

Mais de qualidatavix

Overview Office Business Application
Overview Office Business ApplicationOverview Office Business Application
Overview Office Business Applicationqualidatavix
 
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...qualidatavix
 
4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overviewqualidatavix
 
4º FastShow - Separação de responsabilidades em um relatório
4º FastShow - Separação de responsabilidades em um relatório4º FastShow - Separação de responsabilidades em um relatório
4º FastShow - Separação de responsabilidades em um relatórioqualidatavix
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analyticsqualidatavix
 
1º FastShow Qualidata - Testes Unitários com Dublês
1º FastShow Qualidata - Testes Unitários com Dublês1º FastShow Qualidata - Testes Unitários com Dublês
1º FastShow Qualidata - Testes Unitários com Dublêsqualidatavix
 
1º FastShow Qualidata - (DI) Injeção de Depedência
1º FastShow Qualidata - (DI) Injeção de Depedência1º FastShow Qualidata - (DI) Injeção de Depedência
1º FastShow Qualidata - (DI) Injeção de Depedênciaqualidatavix
 

Mais de qualidatavix (7)

Overview Office Business Application
Overview Office Business ApplicationOverview Office Business Application
Overview Office Business Application
 
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...
4º FastShow - Meio de Informação? Comunicação? Útil? Inútil? Só fofoca e best...
 
4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview4º FastShow - WPF Windows Presentation Foundation Overview
4º FastShow - WPF Windows Presentation Foundation Overview
 
4º FastShow - Separação de responsabilidades em um relatório
4º FastShow - Separação de responsabilidades em um relatório4º FastShow - Separação de responsabilidades em um relatório
4º FastShow - Separação de responsabilidades em um relatório
 
3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics3º Fast Show - SQL Analytics
3º Fast Show - SQL Analytics
 
1º FastShow Qualidata - Testes Unitários com Dublês
1º FastShow Qualidata - Testes Unitários com Dublês1º FastShow Qualidata - Testes Unitários com Dublês
1º FastShow Qualidata - Testes Unitários com Dublês
 
1º FastShow Qualidata - (DI) Injeção de Depedência
1º FastShow Qualidata - (DI) Injeção de Depedência1º FastShow Qualidata - (DI) Injeção de Depedência
1º FastShow Qualidata - (DI) Injeção de Depedência
 

Introdução ao Core Location para iOS

  • 1. Introdução ao Core Location para iOS 5º  FastShow  Qualidata Felipe  Souto @felipesouto
  • 2. Core Location • Framework para obtenção de dados de localização do usuário • CLHeading (Bússola) • CLLocation • CLLocationManager • CLLocationManagerDelegate (Protocol) • Disponível para dispositivos iOS (iPhone, iPad, iPod Touch) e Mac OS X • Não possui interface gráfica • MapKit: API para exibição de mapas
  • 3. Core Location • Não permite acessar diretamente uma tecnologia de localização específica • O foco é no uso dos dados de localização
  • 4. Obtendo a localização Triangulação de torres de celular Não é muito precisa, mas gasta pouca energia Wi-Fi Positioning Service (WPS) Mais precisa do que a triangulação; gasta mais energia A-GPS (Assisted GPS) Muito precisa; gasta muita energia
  • 7. GPS
  • 8. CLLocation • Objeto que contém informações sobre a última localização do dispositivo //  Latitude  e  longitude @property  CLLocationCoordinate2D  coordinate; //  Altitude  em  metros.  Valor  negativo  significa  “abaixo  do   nível  do  mar” @property  CLLocationDistance  altitude; //  Raio  da  incerteza  da  localização  (em  metros) //  Valor  negativo  indica  dado  inválido @property  CLLocationAccuracy  horizontalAccuracy; @property  CLLocationAccuracy  verticalAccuracy;
  • 9. CLLocation //  Constantes  para  definir  precisão  da  localização kCLLocationAccuracyBestForNavigation;  //  plugado  na  tomada kCLLocationAccuracyBest; kCLLocationAccuracyNearestTenMeters; kCLLocationAccuracyHundredMeters; kCLLocationAccuracyKilometer; kCLLocationAccuracyThreeKilometers; //  Direção  (graus)  do  dispositivo //  Sentido  horário:  0  -­‐  Norte,  90  -­‐  Leste,  (...) @property  CLLocationDirection  course; //  Velocidade  instantânea  (m/s) @property  CLLocationSpeed  speed;
  • 10. CLLocation //  Instante  em  que  a  localização  foi  determinada @property  NSDate  timeStamp; //  Distância  (em  metros)  entre  dois  CCLocations -­‐  (CLLocationDistance)distanceFromLocation:(CLLocation   *)location
  • 11.
  • 12. CLLocationManager • Interface responsável por “entregar” as localizações • Tipos de Location Monitoring: • Standard Location Service: updates contínuos baseados em precisão • Significant-Change Location Service: updates somente quando mudanças “significativas” nas localizações ocorrerem (> iOS 4) • Shape-Based Regions: updates baseados em regiões (> iOS 4) • Heading monitoring
  • 13. Utilização do CL • Checar se o hardware suporta o tipo de “Location Monitoring” desejado • Criar uma instância de CLLocationManager • Setar o seu delegate conforme o protocolo CLLocationManagerDelegate • Configurar propriedades relevantes (precisão, “frequência” de atualizações) • Iniciar o monitoramento de mudanças de localização (chamar startUpdatingLocation) • Para preservar energia, chamar stopUpdatingLocation assim que possível
  • 14. Exemplo -­‐  (void)viewDidLoad  { self.locationManager  =  [[CLLocationManager  alloc]  init]; //  Delegate:  objeto  que  recebe  os  updates  de  localização locationManager.delegate  =  self; locationManager.desiredAccuracy  =  kCLLocationAccuracyBest; //  distanceFilter:  distância  mínima  horizontal  (em  metros)   para  o  recebimento  de  updates  de  localização //  kCLDistanceFilterNone:  notifica  sobre  todos  os  movimentos locationManager.distanceFilter  =  10; [locationManager  startUpdatingLocation]; } kCLLocationAccuracyBestForNavigation; kCLLocationAccuracyBest; kCLLocationAccuracyNearestTenMeters; kCLLocationAccuracyHundredMeters; kCLLocationAccuracyKilometer; kCLLocationAccuracyThreeKilometers;
  • 15. CLLocationManagerDelegate • Não é usual pedir ao CLLocationManager por novas localizações • Abordagem padrão: Manager informa sobre updates via delegate • Quando uma classe implementa o protocolo (interface) CCLocationManagerDelegate, é “opcional” implementar dois métodos: • locationManager:didUpdateToLocation:fromLocation: • locationManager:didFailWithError:
  • 16. Mudanças na localização -­‐  (void)locationManager:(CLLocationManager  *)manager   didUpdateToLocation:(CLLocation  *)newLocation   fromLocation:(CLLocation  *)oldLocation  {     if  (startingPoint  ==  nil)     self.startingPoint  =  newLocation;   //  Exibir  a  latitude  em  um  label   NSString  *latitudeString  =  [[NSString  alloc]   initWithFormat:@"%gu00B0",     newLocation.coordinate.latitude];   latitudeLabel.text  =  latitudeString;   [latitudeString  release]; }
  • 18. Notificações de Erros • kCLErrorLocationUnknown: falha na localização (continue tentando!) • kCLErrorDenied: usuário se recusou a fornecer a localização
  • 19. Notificações de Erros -­‐  (void)locationManager:(CLLocationManager  *)manager   didFailWithError:(NSError  *)error  { NSString  *errorType  =  (error.code  ==  kCLErrorDenied)  ?   @"Access  Denied"  :  @"Unknown  Error"; //  Exibir  um  alert  com  a  mensagem  de  erro UIAlertView  *alert  =  [[UIAlertView  alloc]   initWithTitle:@"Error  getting  Location" message:errorType  delegate:nil cancelButtonTitle:@"Okay"  otherButtonTitles:nil]; [alert  show]; [alert  release]; }