2010-11-22 14 views
16

Obecnie moja aplikacja prosi tylko raz o pozwolenie na korzystanie z bieżącej lokalizacji. Jeśli użytkownik nie zezwoli, nie jest pytany ponownie, chyba że resetuje ostrzeżenie o lokalizacji w ustawieniach ogólnych. Chciałbym dać użytkownikowi szansę z poziomu aplikacji, aby udzielił później tego pozwolenia. Innymi słowy, okno dialogowe powinno pojawić się ponownie, jeśli naciśnie odpowiedni przycisk. czy to możliwe?CLLocation zapytaj ponownie o pozwolenie

Dzięki za porady.

+0

Prawdopodobnie nie. To jest kwestia konieczności resetowania ostrzeżeń o lokalizacji. – ryyst

Odpowiedz

9

Nowy Odpowiedź: Teraz w iOS 8 możesz programowo otworzyć aplikację ustawienia urządzenia:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
[[UIApplication sharedApplication] openURL:url]; 

Jeśli wspieranie wcześniejsze wersje iOS i chcesz upewnić się, że mogą być obsługiwane, to zrobić:

if (&UIApplicationOpenSettingsURLString != NULL) { 
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 
    [[UIApplication sharedApplication] openURL:url]; 
} 
else { 
    //Earlier iOS version 
} 

Stara odpowiedź: Nie ma sposobu, aby wymusić pojawienie się rodzimego wyskakującego okienka (i pozwolić użytkownikowi przejść do strony ustawień).

Możesz skorzystać z następujących metod, aby określić, czy użytkownik zezwolił usług lokalizacji dla swojej aplikacji: CLLocationManager:

+(CLAuthorizationStatus)authorizationStatus 

Można również dowiedzieć się, czy usługi lokalizacyjne są włączony globalnie na poziomie urządzenia lub nie też: CLLocationManager:

+(BOOL)locationServicesEnabled 
+0

Jest to tylko częściowo dokładne. locationServicesEnabled poinformuje Cię tylko o ustawieniach urządzeń, a nie o uprawnieniach lokalizacji Twojej aplikacji. – Acey

14

[CLLocationManager locationServicesEnabled] tylko powie, jeżeli usługi te lokalizacje są włączyć urządzenie.

zgodnie z dokumentem this.

[CLLocationManager authorizationStatus]

powróci jeden z tych

typedef enum { 
    kCLAuthorizationStatusNotDetermined = 0, 
    kCLAuthorizationStatusRestricted, 
    kCLAuthorizationStatusDenied, 
    kCLAuthorizationStatusAuthorized 
} CLAuthorizationStatus; 

jeśli wynik jest kCLAuthorizationStatusDenied Twój może poinformować użytkownika w celu umożliwienia korzystania z usług lokalizacyjnych, wysyłając go do settings.app

Powiązane problemy