2012-12-20 42 views
1

我使用[CLLocationManager locationServicesEnabled]函數來獲取位置服務是否啓用的狀態。我保留代碼viewDidLoad方法。爲什麼CLLocationManager總是返回true?

if(![CLLocationManager locationServicesEnabled]) 
{ 
    NSLog(@"No"); 
} 
else 
{ 
    NSLog(@"Yes"); 
} 

當我第一次運行這個應用程序時,它返回Yes。爲什麼?它應該返回我No。當我沒有選擇「允許」或「不允許」選項時就是這種情況。意思是我既不允許也不允許,但在viewDidLoad我得到了Yes

現在我選擇「不允許」,並再次加載相同的viewController。在這個時候,至少它應該返回我No,但我仍然得到Yes。爲什麼?

這麼多與CLLocationManager混淆。

任何想法?

+2

@Krishnabhadra的回答是正確的,這種方法只能告訴* device *上的位置服務的一般狀態。如果你想知道你的應用程序*是否被允許使用它們,你必須使用'authorizationStatus':https://developer.apple.com/library/ios/#documentation/CoreLocation/Reference/CLLocationManager_Class/CLLocationManager/CLLocationManager的.html#// apple_ref/OCC/CLM/CLLocationManager/authorizationStatus – psycho

回答

5

locationServicesEnabled回報位置服務是否在設置中啓用了..如果在設置中啓用,該函數返回YES所有的時間..

documentation

locationServicesEnabled

返回一個布爾值,指示設備上是否啓用位置服務。

討論

用戶可以啓用或通過切換位置服務在總開關從設置 應用禁用位置服務。

在啓動 位置更新之前,您應該檢查此方法的返回值,以確定用戶是否爲當前設備啓用了位置服務 。如果此方法返回NO,並且您始終開始位置更新,則核心位置框架將提示 用戶確認是否應重新啓用位置服務。

用戶允許/拒絕的應用程序權限(在alertview中)是否不影響此方法的返回值。

如果您想知道用戶是否授予訪問位置的應用程序權限,則可以使用authorizationStatus