2011-05-13 128 views
16

我想要具有與地圖應用程序相同的功能,如果用戶每次按「當前位置」按鈕打開其位置服務時都會提示用戶熄滅:如何提示用戶再次打開位置服務...

  • 關閉定位服務
  • 用戶按下「getCurrentLocation」按鈕
  • 應用程序試圖使用CLLocationManager
  • 用戶獲取「開啓定位服務來獲得位置......‘消息顯示’設置「和」取消「按鈕。
  • 用戶點擊「取消」
  • 用戶按下'getCurrentLocation「按鈕再次
  • 應用程序試圖使用CLLocationManager再次
  • 用戶沒有得到」開啓定位服務來獲得位置......」的消息更多的

在地圖應用程序中,用戶每次都會收到「打開位置服務...」消息。我如何讓我的應用程序也這樣做?我讓用戶使用了CLLocationManager的一個新實例,以防這是問題,但事實並非如此。我看不到任何會影響此設置的設置。

如果我自己提醒我無法獲得相同的「設置」按鈕功能。另外,我不希望用戶看到看起來相同的多個警報。

任何想法?

+0

所以我們在地圖應用程序中看到的功能不能在我們自己的應用程序複製的是這一切的結論呢?沒有解決方案,似乎?任何更新?我正在開發一個iOS 7應用程序... – 2013-10-10 03:58:50

回答

10

如果位置服務已啓用,您可以查詢共享CLLocationManager實例。 正確的方式是尊重用戶選擇禁用位置服務。

但是,如果你想,只要啓動位置服務,用戶將被提示重新啓動它。如果用戶選擇請求位置將像往常一樣開始在您的代理上報告。如果用戶拒絕您的請求,您將收到locationManager:didFailWithError:委託方法的失敗回調。該錯誤的錯誤代碼爲kCLErrorDenied

我強烈建議您不要這樣做,但如果用戶拒絕,您可以嘗試再次啓動該服務,並且會再次詢問用戶。但大多數用戶會恨你。

+0

+1用戶應該決定是否允許應用程序在某個時間點使用他們的位置,我注意到很多應用程序都定期使用最近的請求許可,即使它沒有被允許在過去,這不是我的粉絲 – Matt 2011-05-13 23:02:40

+0

同意。如果您的應用程序依賴位置服務獲取任何重要功能,那麼執行此操作的好方法是檢測位置服務何時被禁用,並在應用程序中呈現被動UI以通知用戶並允許他們重新打開位置服務。如果用戶選擇了你,然後可以啓動位置服務,這將提示用戶啓用。 – XJones 2011-05-14 00:29:27

+2

感謝您的反饋。我與你在一起,完全不想惹惱我的用戶重新要求他們允許我的應用程序訪問位置服務。但在這種情況下,用戶正在點擊「獲取當前位置」按鈕,因此告訴他們需要將其打開即可。當用戶點擊「獲取當前位置」按鈕時,這與「地圖」應用程序中的相同。我按照你的建議,調用啓動監視器方法,但它不會重新提示用戶,我只是得到kCLErrorDenied錯誤。 – toofah 2011-05-14 17:28:10

19

如果你想點用戶返回到設置應用的定位服務屏幕,您可以將它們發送到一個特殊的URL,像這樣做:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]]; 
+5

這是蘋果允許的嗎? – 2012-05-10 14:24:09

+2

顯然不是了。 (http://stackoverflow.com/questions/9627451/how-to-open-preferences-settings-with-ios-5-1) – 2012-09-25 19:00:09

+3

這隻適用於iOS 5. – drct 2013-06-21 14:27:43

21

新的iOS 8的有一個稱爲UIApplicationOpenSettingsURLString的常量。

從UIKit的下"What's new in iOS"文件是行:

您可以直接把用戶在設置應用您的應用程序相關的設置。將UIApplicationOpenSettingsURLString常量傳遞給UIApplication類的openURL:方法。

從蘋果公司的documentation

UIApplicationOpenSettingsURLString

用於創建可以傳遞到一個的OpenURL網址:方法。當您打開使用此字符串構建的網址時,系統會啓動「設置」應用並顯示該應用的自定義設置(如果有)。

您可以將此傳遞到UIApplication openURL:方法。它看起來是這樣的:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 

if ([[UIApplication sharedApplication] canOpenURL:settings]) 
    [[UIApplication sharedApplication] openURL:settings]; 
+2

這是一個老問題,但這是2014年的答案是正確的。 – Jessedc 2014-09-21 04:42:24

相關問題