8

jak uzyskać aktualną lokalizację i szerokość geograficzną.Jak uzyskać informacje o aktualnej długości i szerokości geograficznej w IOS SDK 8.0

Próbowałem tego. Przy użyciu Xcode 6.01 i IOS SDK 8.0

-(CLLocationCoordinate2D) getLocation{ 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    CLLocationCoordinate2D coordinate = [location coordinate]; 
    return coordinate; 
} 

- (void)getCurrentLocation{  
    CLLocationCoordinate2D coordinate = [self getLocation]; 
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; 
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; 
    NSLog(@"Latitude = %@", latitude); 
    NSLog(@"Longitude = %@", longitude); 
} 


- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self getCurrentLocation]; 

} 

Tutaj włączam lokalizację symulatora dla symulatora iPhone'a 4 na wdrożenie Deployment 8.0. Nawet na urządzeniu nie działa.

@ALL Proszę dać mi znać, co zrobiłem źle tutaj.

Odpowiedz

0

Tak, symulator oferuje zbyt uproszczoną interpretację usług lokalizacyjnych. Fizyczne urządzenie jest jedynym sposobem, aby naprawdę przetestować zachowanie CLLocationManager.

Problem polega na tym, że dzwoniąc pod numer startUpdatingLocation, nie oznacza to, że można natychmiast pobrać location. (Myślę, że znajdziesz to albo nil lub ma negatywny horizontalAccuracy, co oznacza położenie nie zostało jeszcze ustalone.)

Musisz być zgodne z CLLocationManagerDelegate i wdrożyć locationManager:didUpdateLocations:, która jest wywoływana asynchronicznie. Musisz więc poczekać, aż ta metoda zostanie wywołana przed próbą użycia informacji o lokalizacji. Pamiętaj też, że na prawdziwym urządzeniu prawdopodobnie metoda ta zostanie wywołana kilka razy, ponieważ urządzenie udoskonala informacje o lokalizacji urządzenia, z rosnącą dokładnością (np. Liczba horizontalAccuracy może spaść z jednej aktualizacji lokalizacji na inną).


Oczywiście, pewnie chcą wprowadzić locationManager:didFailWithError: też, więc można wykryć problemy. Prawdopodobnie powinieneś również sprawdzić authorizationStatus, locationServicesEnabled i zadzwonić pod numer requestWhenInUseAuthorization, zanim zadzwonisz pod numer startUpdatingLocation.

0

Wygląda na to, że musimy wykonać więcej zadań, aby zaimplementować usługi lokalizacyjne w ios8. follow this discussion

+0

dodawać zarówno metody z przekazanym didFailWithError i didUpdateToLocation ale to sposoby nie powodują w ogóle – KkMIW

+0

proszę dodać CLLocationManagerDelegate do pliku .h jak ten @ interfejs DemoViewController: UIViewController Samin

+0

Dodałem CLLocationManagerDel egate, wciąż mam problem. Coś jest nie tak po aktualizacji sdk IOS 7 na IOS 8. – KkMIW

5

mi zrozumieć to zagadnienie w IOS 8.0

NSLocationAlwaysUsageDescription dodać to ręcznie do aplikacji pliku plist, pozostaw wartość ciągu pusty. To wywoła metody delegatów. Nigdy nie zapomniałem o dodaniu NSLocationAlwaysUsageDescription, chyba że nie dodałeś tej metody delegata, nie będzie działać. Pozostały kod jest taki sam. z dodaniem delegowanych metod do klasy kontrolera.

dodać tę linię kodu w kodzie deklaracji locationManager. dla IOS 8.0 [locationManager requestAlwaysAuthorization];

3

W systemie iOS 8 ten kończy się niepowodzeniem po cichu. Oznacza to, że nie dostaniesz żadnego błędu ani ostrzeżenia.

trzeba zrobić dwie rzeczy, aby uzyskać dodatkowe pracę Lokalizacja:

  1. dodać klucz do Info.plist
  2. żądanie autoryzacji z menedżera lokalizacji prosząc go, aby rozpocząć.

Dowolny jeden lub oba poniższe klucze należy dodać w pliku Info.plist.

  1. NSLocationWhenInUseUsageDescription
  2. NSLocationAlwaysUsageDescription

Są typu String i wartość może być dowolny opis wiadomość lub pusta.

Teraz musisz poprosić o autoryzację dla odpowiedniej metody lokalizacji. Używać jednego z poniżej połączenia:

  1. [self.locationManager requestWhenInUseAuthorization]
  2. [self.locationManager requestAlwaysAuthorization]
+0

Nice one .... !! Zaoszczędziłeś dużo czasu –