คำถามติดแท็ก core-location

14
ฉันจะรับการอัปเดตตำแหน่งพื้นหลังได้ทุก ๆ นาทีในแอปพลิเคชัน iOS ของฉันได้อย่างไร
ฉันกำลังมองหาวิธีรับการอัปเดตตำแหน่งพื้นหลังทุก ๆ n นาทีในแอปพลิเคชัน iOS ของฉัน ฉันใช้ iOS 4.3 และวิธีแก้ปัญหาควรใช้งานกับ iPhone ที่ไม่ได้รับการเจลเบรคได้ ฉันลอง / พิจารณาตัวเลือกต่อไปนี้: CLLocationManager startUpdatingLocation/startMonitoringSignificantLocationChanges: ใช้งานได้ในพื้นหลังตามที่คาดไว้โดยอิงตามคุณสมบัติที่กำหนดค่า แต่ดูเหมือนว่าเป็นไปไม่ได้ที่จะบังคับให้อัปเดตตำแหน่งทุก ๆ นาที NSTimer: ใช้งานได้เมื่อแอพทำงานในเบื้องหน้า แต่ดูเหมือนจะไม่ได้รับการออกแบบมาสำหรับงานพื้นหลัง การแจ้งเตือนในท้องถิ่น: การแจ้งเตือนในท้องถิ่นสามารถกำหนดเวลาได้ทุก n นาที แต่ไม่สามารถเรียกใช้รหัสบางอย่างเพื่อรับตำแหน่งปัจจุบัน (โดยที่ผู้ใช้ไม่จำเป็นต้องเปิดแอปผ่านการแจ้งเตือน) วิธีการนี้ดูเหมือนจะไม่ใช่วิธีการที่สะอาดเนื่องจากไม่ใช่วิธีการแจ้งเตือนที่ควรใช้ UIApplication:beginBackgroundTaskWithExpirationHandler: เท่าที่ฉันเข้าใจสิ่งนี้ควรใช้เพื่อทำงานบางอย่างให้เสร็จในพื้นหลัง (จำกัด เวลาด้วย) เมื่อแอปถูกย้ายไปที่พื้นหลังแทนที่จะใช้กระบวนการพื้นหลังที่ "ทำงานนาน" ฉันจะใช้การอัปเดตตำแหน่งพื้นหลังปกติเหล่านี้ได้อย่างไร

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


3
พฤติกรรมของ API ตำแหน่งที่เปลี่ยนแปลงอย่างมีนัยสำคัญเมื่อยุติ / ระงับ?
นี่คือส่วนจากเอกสารCLLocationManager ที่อธิบายลักษณะการทำงานของแอปด้วยstartMonitoringSignificantLocationChanges : หากคุณเริ่มบริการนี้และแอปพลิเคชันของคุณถูกยกเลิกในเวลาต่อมาระบบจะเปิดแอปพลิเคชันอีกครั้งโดยอัตโนมัติในพื้นหลังหากมีเหตุการณ์ใหม่เข้ามา ในกรณีเช่นนี้พจนานุกรมตัวเลือกจะส่งผ่านไปยังแอปพลิเคชัน: didFinishLaunchingWithOptions: วิธีการของตัวแทนแอปพลิเคชันของคุณมีคีย์ UIApplicationLaunchOptionsLocationKey เพื่อระบุว่าแอปพลิเคชันของคุณถูกเปิดใช้เนื่องจากเหตุการณ์ที่ตั้ง เมื่อเปิดใหม่คุณยังต้องกำหนดค่าออบเจ็กต์ตัวจัดการสถานที่และเรียกใช้เมธอดนี้เพื่อรับเหตุการณ์ตำแหน่งต่อไป เมื่อคุณเริ่มบริการตำแหน่งใหม่เหตุการณ์ปัจจุบันจะถูกส่งไปยังผู้รับมอบสิทธิ์ของคุณทันที นอกจากนี้คุณสมบัติตำแหน่งของออบเจ็กต์ตัวจัดการสถานที่ของคุณจะถูกเติมด้วยออบเจ็กต์ตำแหน่งล่าสุดก่อนที่คุณจะเริ่มบริการตำแหน่ง ดังนั้นความเข้าใจของผมคือว่าถ้ายุติแอปของคุณ (และผมถือว่าถ้าคุณไม่โทรstopMonitoringSignificantLocationChangesจากapplicationWillTerminate ) คุณจะได้รับการตื่นขึ้นมาด้วยUIApplicationLaunchOptionsLocationKeyพารามิเตอร์การประยุกต์ใช้: didFinishLaunchingWithOptions เมื่อมาถึงจุดที่คุณสร้างของคุณCLLocationManagerโทรstartMonitoringSignificantLocationChangesและทำการประมวลผลที่ตั้งของพื้นหลังของคุณสำหรับระยะเวลาที่ จำกัด ดังนั้นฉันสบายดีกับบิตนี้ ย่อหน้าก่อนหน้านี้พูดถึงสิ่งที่เกิดขึ้นเมื่อแอปถูกยุติเท่านั้นไม่ได้แนะนำสิ่งที่คุณทำเมื่อแอปพลิเคชันถูกระงับ เอกสารสำหรับdidFinishLaunchingWithOptionsกล่าวว่า: แอปพลิเคชันติดตามการอัปเดตตำแหน่งในพื้นหลังถูกล้างและตอนนี้ได้เปิดใช้งานใหม่แล้ว ในกรณีนี้พจนานุกรมจะมีคีย์ที่ระบุว่าแอปพลิเคชันถูกเปิดใช้งานอีกครั้งเนื่องจากเหตุการณ์ตำแหน่งใหม่ แนะนำว่าคุณจะรับสายนี้ก็ต่อเมื่อแอปของคุณเปิดตัว (เนื่องจากมีการเปลี่ยนสถานที่) หลังจากที่คุณถูกยกเลิก อย่างไรก็ตามย่อหน้าเกี่ยวกับบริการการเปลี่ยนแปลงที่สำคัญในคู่มือการเขียนโปรแกรมการรับรู้ตำแหน่งมีสิ่งต่อไปนี้ที่จะกล่าว: หากคุณปล่อยให้บริการนี้ทำงานและแอปพลิเคชันของคุณถูกระงับหรือยุติในภายหลังบริการจะปลุกแอปพลิเคชันของคุณโดยอัตโนมัติเมื่อมีข้อมูลตำแหน่งใหม่มาถึง เมื่อถึงเวลาปลุกแอปพลิเคชันของคุณจะถูกวางไว้ในพื้นหลังและให้เวลาเล็กน้อยในการประมวลผลข้อมูลตำแหน่ง เนื่องจากแอปพลิเคชันของคุณทำงานอยู่เบื้องหลังจึงควรทำงานน้อยที่สุดและหลีกเลี่ยงงานใด ๆ (เช่นการสืบค้นเครือข่าย) ที่อาจป้องกันไม่ให้กลับมาก่อนเวลาที่จัดสรรไว้จะหมดลง หากไม่เป็นเช่นนั้นใบสมัครของคุณอาจถูกยกเลิก สิ่งนี้แสดงว่าคุณถูกปลุกด้วยข้อมูลตำแหน่งหากแอปของคุณถูกระงับ แต่ไม่ได้ระบุว่าคุณตื่นขึ้นมาอย่างไร: ที่ไม่UIApplicationDelegateได้รับการติดต่อกลับบอกฉันว่าฉันกำลังกลับมาจากสถานะที่ถูกระงับในสภาพพื้นหลัง? ผู้จัดการสถานที่ (ซึ่งถูกทำให้แห้งเมื่อแอปถูกระงับ) เริ่มรับlocationManager: didUpdateToLocation: fromLocation callbacks หรือไม่ ฉันต้องติดตั้งโค้ดในข้อความdidUpdateToLocationของฉันซึ่งจะตรวจสอบสถานะแอปพลิเคชันและทำการประมวลผลน้อยที่สุดหากอยู่ในโหมดพื้นหลังหรือไม่ ในขั้นตอนการเขียนสิ่งนี้ฉันคิดว่าฉันอาจจะเพิ่งตอบคำถามของตัวเอง แต่มันจะดีมากถ้ามีคนที่มีความรู้มากกว่านี้มายืนยันความเข้าใจของฉัน

9
การอัปเดตตำแหน่งพื้นหลัง iOS เป็นระยะ
ผมเขียนโปรแกรมที่ต้องมีการปรับปรุงสถานที่ตั้งของพื้นหลังที่มีความแม่นยำสูงและความถี่ต่ำ โซลูชันนี้ดูเหมือนจะเป็นงาน NSTimer พื้นหลังที่เริ่มการอัปเดตของผู้จัดการสถานที่ซึ่งจะปิดลงทันที คำถามนี้ถูกถามมาก่อน: ฉันจะอัปเดตตำแหน่งพื้นหลังทุกๆ n นาทีในแอปพลิเคชัน iOS ของฉันได้อย่างไร รับตำแหน่งของผู้ใช้ทุก ๆ n นาทีหลังจากแอปไปที่พื้นหลัง iOS ไม่ใช่ปัญหาตัวจับเวลาการติดตามตำแหน่งพื้นหลังทั่วไป ตัวจับเวลาพื้นหลังที่ใช้งานได้ยาวนานของ iOS พร้อมโหมดพื้นหลัง "ตำแหน่ง" บริการพื้นหลังเต็มเวลา iOS ตามการติดตามตำแหน่ง แต่ฉันยังไม่ได้รับตัวอย่างขั้นต่ำที่ใช้งานได้ หลังจากลองเปลี่ยนทุกคำตอบที่ยอมรับข้างต้นแล้วฉันได้รวบรวมจุดเริ่มต้น เข้าสู่พื้นหลัง: - (void)applicationDidEnterBackground:(UIApplication *)application { self.bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{ NSLog(@"ending background task"); [[UIApplication sharedApplication] endBackgroundTask:self.bgTask]; self.bgTask = UIBackgroundTaskInvalid; }]; self.timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self.locationManager …


4
ข้อผิดพลาดของคอมไพเลอร์: ไฟล์ไลบรารีไม่ถูกต้อง - CoreLocation
ฉันมีหนึ่งในแอปพลิเคชันของฉันที่สร้างขึ้นใน Xcode 8 ฉันใช้ CoreLocation และ MapKit ในแอปนั้น ฉันมีแอพอัปเดตล่าสุดiOSจนถึงตอนนี้ และมันก็ทำงานได้ดี iOS 1ตอนนี้ผมกำลังอัปเดตโปรแกรมด้วย ดังนั้นฉันจึงเปิดแอพด้วยXcode 11.0และอัปเดตรหัสที่จำเป็นทั้งหมด ปรับปรุงการตั้งค่าที่แนะนำโดย Xcode "ทำการเปลี่ยนแปลง" และทั้งหมด ตอนนี้ฉันเรียกใช้แอปพลิเคชัน แต่ฉันได้รับข้อผิดพลาดเช่น: Compiler error: Invalid library file. ฉันค้นหาล็อตแล้ว แต่ไม่พบวิธีแก้ปัญหาใด ๆ นี่เป็นข้อบกพร่องในสิ่งใหม่Xcodeหรือใหม่iOSหรือไม่? มีอะไรที่ฉันต้องทำการเปลี่ยนแปลงเพิ่มเติมหรือการตั้งค่า? กรุณาแนะนำฉัน นี่เป็นข้อบกพร่องที่รู้จักโดย Apple หรือไม่? แก้ไข : 2019-10-18 10: 34: 39.899827 + 0530 MapLocation [1697: 57778] ข้อผิดพลาดของคอมไพเลอร์: ไฟล์ไลบรารีไม่ถูกต้อง 2019-10-18 10: 34: …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.