20
Introdução ao Core Location para iOS 5º FastShow Qualidata Felipe Souto @felipesouto

Introdução ao Core Location para iOS

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Introdução ao Core Location para iOS

Introdução aoCore Location para iOS

5º  FastShow  QualidataFelipe  Souto@felipesouto

Page 2: Introdução ao Core Location para iOS

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

Page 3: Introdução ao Core Location para iOS

Core Location

• Não permite acessar diretamente uma tecnologia de localização específica

• O foco é no uso dos dados de localização

Page 4: Introdução ao Core Location para iOS

Obtendo a localizaçãoTriangulação de torres de celular

Wi-Fi Positioning Service (WPS)

A-GPS (Assisted GPS)

Não é muito precisa, mas gasta pouca energia

Mais precisa do que a triangulação; gasta mais energia

Muito precisa; gasta muita energia

Page 5: Introdução ao Core Location para iOS

Triangulação de torres

Page 6: Introdução ao Core Location para iOS

Wi-Fi Positioning

Page 7: Introdução ao Core Location para iOS

GPS

Page 8: Introdução ao Core Location para iOS

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;

Page 9: Introdução ao Core Location para iOS

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;

Page 10: Introdução ao Core Location para iOS

CLLocation//  Instante  em  que  a  localização  foi  determinada@property  NSDate  timeStamp;

//  Distância  (em  metros)  entre  dois  CCLocations-­‐  (CLLocationDistance)distanceFromLocation:(CLLocation  *)location

Page 11: Introdução ao Core Location para iOS
Page 12: Introdução ao Core Location para iOS

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

Page 13: Introdução ao Core Location para iOS

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

Page 14: Introdução ao Core Location para iOS

Exemplo-­‐  (void)viewDidLoad  {

self.locationManager  =  [[CLLocationManager  alloc]  init];//  Delegate:  objeto  que  recebe  os  updates  de  localizaçãolocationManager.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  movimentoslocationManager.distanceFilter  =  10;[locationManager  startUpdatingLocation];

} kCLLocationAccuracyBestForNavigation;kCLLocationAccuracyBest;kCLLocationAccuracyNearestTenMeters;kCLLocationAccuracyHundredMeters;kCLLocationAccuracyKilometer;kCLLocationAccuracyThreeKilometers;

Page 15: Introdução ao Core Location para iOS

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:

Page 16: Introdução ao Core Location para iOS

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:@"%g\u00B0",     newLocation.coordinate.latitude];   latitudeLabel.text  =  latitudeString;   [latitudeString  release];}

Page 17: Introdução ao Core Location para iOS

Notificações de Erros

Page 18: Introdução ao Core Location para iOS

Notificações de Erros

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

• kCLErrorDenied: usuário se recusou a fornecer a localização

Page 19: Introdução ao Core Location para iOS

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  erroUIAlertView  *alert  =  [[UIAlertView  alloc]  initWithTitle:@"Error  getting  Location"

message:errorType  delegate:nilcancelButtonTitle:@"Okay"  otherButtonTitles:nil];

[alert  show];[alert  release];

}

Page 20: Introdução ao Core Location para iOS

Dúvidas?