簡體   English   中英

如何提示用戶再次打開位置服務....

[英]How to prompt user to turn on Location Services…again

我想擁有與地圖應用程序相同的功能,每當用戶按下“當前位置”按鈕打開位置服務時,系統會提示用戶:

  • 關閉位置服務
  • 用戶按下'getCurrentLocation'按鈕
  • 應用程序嘗試使用CLLocationManager獲取位置
  • 用戶收到“打開位置服務...”消息,顯示“設置”和“取消”按鈕。
  • 用戶點擊“取消”
  • 用戶再次按下''getCurrentLocation'按鈕
  • 應用程序嘗試再次使用CLLocationManager獲取位置
  • 用戶不再獲得“打開位置服務...”消息

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

如果我自己發出警報,我就無法獲得相同的“設置”按鈕功能。 此外,我不希望用戶看到多個看起來相同的警報。

有任何想法嗎?

在iOS 8中有一個名為UIApplicationOpenSettingsURLString的常量。

來自UIKit下的“iOS中的新功能”文檔是:

您可以在“設置”應用中將用戶直接帶到與應用相關的設置。 UIApplicationOpenSettingsURLString常量傳遞給UIApplication類的openURL:方法。

來自Apple的文檔

UIApplicationOpenSettingsURLString

用於創建可以傳遞給openURL:方法的URL。 當您打開從此字符串構建的URL時,系統會啟動“設置”應用並顯示應用的自定義設置(如果有)。

您可以將其傳遞給UIApplication openURL:方法。 它可能看起來像:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

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

如果要將用戶指回“設置”應用中的“位置服務”屏幕,可以將其發送到特殊URL,如下所示:

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

如果啟用了位置服務,則可以查詢共享CLLocationManager實例。 正確的方法是尊重用戶選擇以禁用位置服務。

但是,如果您願意,只需啟動位置服務,系統將提示用戶再次啟動它。 如果用戶選擇加入請求,將開始像往常一樣在您的代表上報告位置。 如果用戶拒絕您的請求,您將收到一個故障回調到locationManager:didFailWithError:委托方法。 該錯誤的錯誤代碼為kCLErrorDenied

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM