2011-05-06 52 views
7

當我們在應用程序中使用位置服務時,我們收到一個iOS警報,說應用程序正在嘗試使用當前位置 - 允許/不允許。位置服務iOS警報回調

我們是否有這些按鈕的代表回撥?

我想處理點擊「不允許」。

回答

15

您無法直接訪問該警報。

如果用戶按下「不允許」,或者如果該應用程序無權使用位置服務,則CLLocationManager將在其代表上呼叫locationManager:didFailWithError:。錯誤域將爲kCLErrorDomain,錯誤代碼爲kCLErrorDenied

+0

這是一個很好的提示,但我發現在我得到這個回調之前顯示了警報,甚至是didChangeAuthorizationStatus回調。還有什麼我可以做的嗎? – elsurudo 2012-08-20 18:52:12

+0

@elsurudo,你現在可能已經想通了,但是對於記錄來說,只要在CLLocationManager上啓動位置更新,Apple就會顯示該警報。如果您想直觀地告訴用戶爲什麼您要讓系統請求他們的位置,則需要爲此創建自己的用戶界面,並避免啓動位置管理器,直到確定用戶已輕按或滑動你的UI。 – clozach 2013-02-01 01:40:23

3

在啓動位置管理器之前,您還應該檢查用戶是否允許爲您的應用提供位置服務。使用CLLocationManager類方法locationServicesEnabled進行檢查。

這裏的DOC:

locationServicesEnabled

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

+ (BOOL)locationServicesEnabled

返回值 是如果位置服務啓用或NO,如果他們不。

討論 用戶可以通過切換設置>常規>位置服務中的開關,從「設置」應用程序完全啓用或禁用位置服務。

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

+0

這有點危險,因爲這會確定位置服務是打開還是關閉,所以用戶可以打開定位服務,但是專門關閉您的應用。 – RickiG 2011-08-01 16:58:27

+0

這並不危險,事實上Apple建議在啓動位置管理器之前檢查位置服務是否已啓用(請參閱文檔中的LocateMe示例代碼)。這是首先要檢查的。您還應該在代理中檢查kCLErrorDenied。 – 2011-08-01 20:44:46

+0

我有點含糊,對不起。我的意思是不僅僅依賴於[CLLocationManager locationServicesEnabled],因爲用戶可能通常打開位置服務,但是關閉您的應用:) – RickiG 2011-08-02 09:41:05

6

你可以簡單地得到行動選擇如下圖所示:

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
    if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { 
     [self addRegion]; 
    } 
    else if (status == kCLAuthorizationStatusDenied) { 
     NSLog(@"Location access denied"); 
    } 
} 

確保設置位置管理的委託。

+2

謝謝完美的解決方案.. – 2015-12-08 09:38:22