J'essaie de modifier mes paramètres CLLocationManager de sorte que lorsque j'appelle startUpdatingLocation, il appelle immédiatement le délégué. Une idée sur la façon de faire cela?Comment obtenir CLLLocationManager pour retourner immédiatement avec un emplacement?
Répondre
Ce n'est pas possible. La raison est simple, l'appareil n'a pas de position fixe qui correspond à votre précision désirée tout le temps. Il peut être nécessaire d'activer la puce GPS pour cela, ce qui prend également un certain temps pour trouver un emplacement (sans infos supplémentaires et un almanach obsolète, cela peut prendre jusqu'à 15 minutes dans le pire des cas).
Il n'est pas possible de modifier CLLocationManger de cette manière. Cependant, ce que vous pouvez faire est d'écrire un wrapper autour de CLLocationManager qui obtient la position actuelle au démarrage et la renvoie chaque fois que vous le demandez. Cependant, il peut y avoir des situations où l'emplacement n'est pas (encore) disponible, et cette approche consomme beaucoup d'énergie, car vous utilisez l'appareil GPS tout le temps.
C'est de loin pas le préférable d'utiliser un CLLocationManager
et quand je trouve le temps que je me prépare à aller en arrière et changer mon code pour avoir seulement un seul CLLocationManager
façon (même pas une bonne façon sans doute) dans mon AppDelegate et que tous les contrôleurs sous-vue appellent AppDelegate pour leurs besoins de localisation. J'ai le code suivant dans un contrôleur de vue (pas le contrôleur principal ou le délégué d'application non plus), et environ 5-10 secondes après que le contrôleur de vue est poussé par mon contrôleur de navigation principal, il commence à écrire NSLog
avec un précise latitude/longitude de ma position (la méthode déléguée locationManager:didUpdateToLocation:fromLocation:
commence à s'appeler):
- (void)viewDidLoad {
[super viewDidLoad];
// ....
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager startUpdatingLocation];
// ....
}
// This will be called just a few seconds after the view appears and the
// location is accurate (if I have location services on and good sky-line of sight)
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 5.0) {
self.latitude = [NSNumber numberWithDouble:newLocation.coordinate.latitude];
self.longitude = [NSNumber numberWithDouble:newLocation.coordinate.longitude];
NSLog(@"New Latitude %+.6f, Longitude %+.6f", newLocation.coordinate.latitude, newLocation.coordinate.longitude);
}
}
// Then, tear down the location Manager (so I can use it in another view controller)
// A bit excessive possibly, but I like to be absolutely sure that my App does not use the GPS
// when it doesn't need it to save batter life.
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[locationManager stopMonitoringSignificantLocationChanges];
[locationManager stopUpdatingHeading];
[locationManager stopUpdatingLocation];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
[locationManager stopMonitoringSignificantLocationChanges];
[locationManager stopUpdatingHeading];
[locationManager stopUpdatingLocation];
}
- (void)viewDidUnload {
[locationManager stopUpdatingLocation];
[locationManager stopMonitoringSignificantLocationChanges];
[locationManager stopUpdatingHeading];
[locationManager setDelegate:nil];
self.locationManager = nil;
}
- (void)dealloc {
// ....
[locationManager stopUpdatingLocation];
[locationManager setDelegate:nil];
[locationManager release], locationManager = nil;
// ....
[super dealloc];
}
Puis, dans des endroits comme actionSheet:clickedButtonAtIndex:
, je peux obtenir l'emplacement des valeurs on0demand avec locationManager.location.coordinate.latitude
/locationManager.location.coordinate.longitude
ou self.latitude
/self.longitude
.
- 1. pthread_cond_timedwait retourner immédiatement
- 2. boost :: condition_variable.timed_wait retourner immédiatement
- 3. Obtenir point.x pour un emplacement avec un relèvement proche 0
- 4. Obtenir un emplacement précis avec CLLocationManager
- 5. ant JDB retourner immédiatement d'une tâche
- 6. Comment obtenir un emplacement GPS plus précis?
- 7. Comment obtenir FutureTask pour retourner après TimeoutException?
- 8. Comment faire pour obtenir getIntent() pour retourner null après l'activité appelée avec un ensemble d'intention
- 9. Obtenir un décalage de fuseau horaire pour un emplacement donné
- 10. Obtenir RAILS pour retourner un dateTime dans un format spécifique?
- 11. obtenir div emplacement actuel
- 12. CLLocationManger donne l'ancien emplacement. Comment obtenir le nouvel emplacement?
- 13. Comment puis-je obtenir un emplacement plus précis?
- 14. Comment déclencher un événement immédiatement?
- 15. Comment obtenir un emplacement vérifié en utilisant HTML5?
- 16. requête SQL pour retourner un seul prix le plus bas par emplacement du jeu de résultats
- 17. Obtenir un 302 http emplacement de redirection avec DataBinder-Dispatch
- 18. Obtenir l'heure d'un emplacement
- 19. comment obtenir un nouvel emplacement dans google place dans iphone?
- 20. Message d'alerte pour un emplacement
- 21. comment obtenir les tendances de twitter sur un emplacement spécifique
- 22. Comment obtenir une fonction pour retourner différents types
- 23. Comment nous pouvons obtenir BootAnimation.zip Emplacement dans android avec adb.exe?
- 24. comment retourner un objet complet avec mongoose
- 25. comment obtenir webdav pour retourner svn répertoire listing
- 26. Comment retourner un champ avec du texte?
- 27. Comment obtenir un emplacement de programme en C
- 28. Comment faire pour retourner un EncodedImage Blackberry
- 29. Get sidekiq pour exécuter un travail immédiatement
- 30. méthode java pour stocker un caractère à l'emplacement spécifié et la méthode pour retourner le caractère à un emplacement?