Introdução ao Core Location para iOS

1,460 views
1,353 views

Published on

Apresentação feita por Felipe Souto no evento FastShow da empresa Qualidata.

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,460
On SlideShare
0
From Embeds
0
Number of Embeds
249
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Introdução ao Core Location para iOS

  1. 1. Introdução aoCore Location para iOS 5º  FastShow  Qualidata Felipe  Souto @felipesouto
  2. 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. 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. 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
  5. 5. Triangulação de torres
  6. 6. Wi-Fi Positioning
  7. 7. GPS
  8. 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. 9. CLLocation//  Constantes  para  definir  precisão  da  localizaçãokCLLocationAccuracyBestForNavigation;  //  plugado  na  tomadakCLLocationAccuracyBest;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. 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. 11. 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
  12. 12. 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
  13. 13. 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;
  14. 14. 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:
  15. 15. 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];}
  16. 16. Notificações de Erros
  17. 17. Notificações de Erros• kCLErrorLocationUnknown: falha na localização (continue tentando!)• kCLErrorDenied: usuário se recusou a fornecer a localização
  18. 18. 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:nilcancelButtonTitle:@"Okay"  otherButtonTitles:nil]; [alert  show]; [alert  release];}
  19. 19. Dúvidas?

×