วิธีแจ้งให้ผู้ใช้เปิดบริการระบุตำแหน่งอีกครั้ง

ฉันต้องการให้ฟังก์ชันการทำงานเหมือนกับแอป Map ซึ่งผู้ใช้จะได้รับแจ้งทุกครั้งที่กดปุ่ม 'ตำแหน่งปัจจุบัน' เพื่อเปิดบริการระบุตำแหน่งหากปิดอยู่:

  • ปิดบริการระบุตำแหน่ง
  • ผู้ใช้กดปุ่ม 'getCurrentLocation'
  • แอปพยายามรับตำแหน่งโดยใช้ CLLocationManager
  • ผู้ใช้ได้รับข้อความ "เปิดบริการระบุตำแหน่ง..." ที่แสดงปุ่ม "การตั้งค่า" และ "ยกเลิก"
  • ผู้ใช้แตะ 'ยกเลิก'
  • ผู้ใช้กดปุ่ม ''getCurrentLocation' อีกครั้ง
  • แอปพยายามรับตำแหน่งโดยใช้ CLLocationManager อีกครั้ง
  • ผู้ใช้ไม่ได้รับข้อความ "เปิดบริการระบุตำแหน่ง..." อีกต่อไป

ในแอพแผนที่ ผู้ใช้จะได้รับข้อความ "เปิดบริการระบุตำแหน่ง..." ทุกครั้ง ฉันจะทำให้แอปของฉันทำเช่นเดียวกันได้อย่างไร ฉันสร้างผู้ใช้ให้ฉันใช้อินสแตนซ์ใหม่ของ CLLocationManager ในกรณีที่นั่นคือปัญหา แต่ไม่ใช่ ฉันไม่เห็นการตั้งค่าใดๆ ที่จะส่งผลต่อสิ่งนี้

หากฉันสร้างการแจ้งเตือนของตัวเอง ฉันจะไม่สามารถใช้ปุ่ม 'การตั้งค่า' แบบเดิมได้ นอกจากนี้ ฉันไม่ต้องการให้ผู้ใช้เห็นการแจ้งเตือนหลายรายการที่เหมือนกัน

มีความคิดอะไรบ้าง?


person toofah    schedule 13.05.2011    source แหล่งที่มา
comment
ดังนั้นฟังก์ชันที่เราเห็นในแอปพลิเคชัน Maps ไม่สามารถจำลองในแอปของเราเองได้คือบทสรุปของมันทั้งหมดใช่ไหม ดูเหมือนไม่มีวิธีแก้ปัญหาเหรอ? มีอัพเดตอะไรบ้าง? ฉันกำลังทำงานกับแอป iOS 7...   -  person John Erck    schedule 10.10.2013


คำตอบ (3)


สิ่งใหม่ใน iOS 8 มีค่าคงที่ที่เรียกว่า UIApplicationOpenSettingsURLString

จากเอกสาร มีอะไรใหม่ใน iOS ภายใต้ UIKit คือบรรทัด:

คุณสามารถนำผู้ใช้ไปยังการตั้งค่าที่เกี่ยวข้องกับแอปของคุณได้โดยตรงในแอปการตั้งค่า ส่งค่าคงที่ UIApplicationOpenSettingsURLString ไปยัง openURL: วิธีการของคลาส UIApplication

จากเอกสารประกอบของ Apple:

UIApplicationOpenSettingsURLString

ใช้เพื่อสร้าง URL ที่คุณสามารถส่งผ่านไปยัง openURL: วิธีการ เมื่อคุณเปิด URL ที่สร้างจากสตริงนี้ ระบบจะเปิดแอปการตั้งค่าและแสดงการตั้งค่าแบบกำหนดเองของแอป หากมี

คุณสามารถส่งผ่านสิ่งนี้ไปยังวิธี UIApplication openURL: อาจมีลักษณะดังนี้:

NSURL *settings = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:settings])
    [[UIApplication sharedApplication] openURL:settings];
person Aaron Wasserman    schedule 10.09.2014
comment
นี่เป็นคำถามเก่า แต่นี่เป็นคำตอบที่ถูกต้องในปี 2014 - person Jessedc; 21.09.2014

หากคุณต้องการชี้ผู้ใช้กลับไปที่หน้าจอบริการหาตำแหน่งที่ตั้งในแอพการตั้งค่า คุณสามารถทำได้โดยส่งพวกเขาไปยัง URL พิเศษ เช่น:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString: @"prefs:root=LOCATION_SERVICES"]];
person Jacob White    schedule 12.02.2012
comment
เห็นได้ชัดว่าไม่ใช่อีกต่อไป (stackoverflow.com/questions/9627451/) - person Matthew Lowe; 25.09.2012

คุณสามารถสอบถามอินสแตนซ์ CLLocationManager ที่ใช้ร่วมกันได้หากเปิดใช้งานบริการระบุตำแหน่ง วิธีที่ถูกต้องคือการเคารพตัวเลือกของผู้ใช้ในการปิดใช้งานบริการระบุตำแหน่ง

แต่ถ้าคุณต้องการ เพียงเริ่มบริการระบุตำแหน่งแล้วผู้ใช้จะได้รับแจ้งให้เริ่มใหม่อีกครั้ง หากผู้ใช้เลือกรับตำแหน่งคำขอ ระบบจะเริ่มรายงานตำแหน่งให้กับผู้รับมอบสิทธิ์ของคุณตามปกติ หากผู้ใช้ปฏิเสธคำขอของคุณแทน คุณจะได้รับการติดต่อกลับล้มเหลวไปยังวิธีการมอบสิทธิ์ locationManager:didFailWithError: ข้อผิดพลาดจะมีรหัสข้อผิดพลาด kCLErrorDenied

ฉันขอแนะนำอย่างยิ่งให้คุณไม่ทำเช่นนี้ แต่คุณสามารถลองเริ่มบริการอีกครั้งได้หากผู้ใช้ปฏิเสธ และระบบจะถามผู้ใช้อีกครั้ง ผู้ใช้ส่วนใหญ่จะเกลียดคุณในเรื่องนี้

person PeyloW    schedule 13.05.2011
comment
+1 ผู้ใช้ควรตัดสินใจว่าพวกเขาต้องการอนุญาตให้แอปใช้ตำแหน่งของพวกเขา ณ จุดหนึ่งหรือไม่ ฉันสังเกตเห็นว่ามีแอปจำนวนมากที่ฉันเคยใช้เมื่อเร็ว ๆ นี้ขออนุญาตเป็นประจำแม้ว่าจะไม่ได้รับอนุญาตในอดีตก็ตาม ซึ่งฉันไม่ใช่แฟน ของ - person Matt; 14.05.2011
comment
เห็นด้วย. หากแอปของคุณอาศัยบริการระบุตำแหน่งสำหรับฟังก์ชันสำคัญใดๆ วิธีที่ดีในการทำเช่นนี้คือการตรวจสอบว่าบริการระบุตำแหน่งถูกปิดใช้งานเมื่อใด และแสดง UI แบบพาสซีฟในแอปของคุณซึ่งจะแจ้งเตือนผู้ใช้และอนุญาตให้พวกเขาเปิดบริการระบุตำแหน่งได้อีกครั้ง หากผู้ใช้เลือกใช้ คุณสามารถเริ่มบริการระบุตำแหน่งได้ซึ่งจะแจ้งให้ผู้ใช้เปิดใช้งาน - person XJones; 14.05.2011
comment
ขอบคุณสำหรับคำติชมของคุณ ฉันอยู่กับคุณและไม่ต้องการรบกวนผู้ใช้ของฉันโดยขอให้พวกเขาอนุญาตให้แอปพลิเคชันของฉันเข้าถึงบริการระบุตำแหน่ง แต่ในกรณีนี้ ผู้ใช้กำลังแตะปุ่มรับตำแหน่งปัจจุบัน ดังนั้นจึงเป็นการเหมาะสมที่จะบอกพวกเขาว่าต้องเปิดใช้งานสิ่งนี้ ซึ่งจะเหมือนกับในแอปพลิเคชันแผนที่เมื่อผู้ใช้แตะที่ปุ่มรับตำแหน่งปัจจุบัน ฉันกำลังทำตามที่คุณแนะนำ โดยเรียกใช้เมธอด start monitor แต่ไม่ได้แจ้งให้ผู้ใช้ทราบอีกครั้ง ฉันเพิ่งได้รับข้อผิดพลาด kCLErrorDenied - person toofah; 14.05.2011
comment
สิ่งนี้ไม่ถูกต้อง เมื่อแสดงมุมมองการแจ้งเตือนการอนุญาตบริการระบุตำแหน่ง ผู้ใช้จะไม่เห็นอีก เคย. (แม้ว่าจะรีเซ็ตโทรศัพท์แล้วก็ตาม) แม้แต่แอปที่ถูกลบและติดตั้งใหม่ก็จะไม่แสดงอีก วิธีเดียวที่ผู้ใช้สามารถคืนค่าการอนุญาตบริการระบุตำแหน่งได้คือไปที่แอปการตั้งค่าแล้วเปิดใช้งานอีกครั้งโดยตรง - person Yetanotherjosh; 12.08.2011
comment
@Yetanotherjosh นอกจากนี้ คำเตือนตำแหน่งสามารถรีเซ็ตได้ด้วยตนเองในการตั้งค่า > ทั่วไป > รีเซ็ต > รีเซ็ตคำเตือนตำแหน่ง - person MattyG; 12.11.2011
comment
@MattyG แน่นอนฉันเห็นสิ่งนี้ด้วยตัวเองเมื่อเร็ว ๆ นี้ ดูเหมือนว่าจะมีการเพิ่มเข้ามาในการอัพเดตระบบปฏิบัติการล่าสุด หรือฉันพลาดไปหรือเปล่า? ไม่ว่าจะด้วยวิธีใดก็มีประโยชน์ โปรดทราบด้วยว่าขณะนี้ใน iOS 5 การลบและติดตั้งแอปใหม่จะรีเซ็ตคำถามการอนุญาตประเภทนี้ทั้งหมด ดังนั้นแน่นอนว่าฉันไม่เคยมีการใช้งานเลยในการนับหลายครั้ง - person Yetanotherjosh; 14.11.2011