2011-10-15 1 views

Répondre

2

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

0

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.

0

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.

Questions connexes