-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLocationTrackerAPI.swift
More file actions
91 lines (71 loc) · 2.78 KB
/
LocationTrackerAPI.swift
File metadata and controls
91 lines (71 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//
// LocationTracker
// Tester
//
// Created by Poorna Jayasinghe on 10/30/19.
// Copyright © 2019 Poorna Jayasinghe. All rights reserved.
//
import Foundation
import MapKit
/*
Add - NSLocationAlwaysAndWhenInUseUsageDescription
Add - NSLocationWhenInUseUsageDescription
Turn on - Capabilities -> Background modes -> Location updates
*/
class LocationTracker: NSObject, CLLocationManagerDelegate {
private let locationManager = CLLocationManager()
private var userLocation: CLLocationCoordinate2D?
private var userHeading: CLLocationDirection?
func getUserCurrentLocation() -> CLLocationCoordinate2D? {
return self.userLocation
}
func getUserCurrentHeading() -> CLLocationDirection? {
return self.userHeading
}
func stopLocationTracking() {
self.locationManager.stopUpdatingLocation()
self.locationManager.stopUpdatingHeading()
}
func startLocationTracking() {
self.locationManager.requestAlwaysAuthorization()
self.locationManager.requestWhenInUseAuthorization()
if CLLocationManager.locationServicesEnabled() {
self.locationManager.delegate = self
self.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
self.locationManager.allowsBackgroundLocationUpdates = true
self.locationManager.showsBackgroundLocationIndicator = true
self.locationManager.headingFilter = 1
self.locationManager.startUpdatingLocation()
self.locationManager.startUpdatingHeading()
} else {
if let url = URL(string: "App-Prefs:root=Privacy&path=LOCATION") {
UIApplication.shared.openURL(url)
}
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let currentLocation: CLLocationCoordinate2D = manager.location?.coordinate else { return }
self.userLocation = currentLocation
print("User Location = \(userLocation!.latitude) \(userLocation!.longitude)")
}
func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
self.userHeading = newHeading.trueHeading
print("User Heading = \(newHeading.trueHeading)")
}
}
class JayLocationTracker {
static var internalLocationTracker: LocationTracker?
static func startTracking() {
if internalLocationTracker == nil {
internalLocationTracker = LocationTracker()
}
internalLocationTracker!.startLocationTracking()
print("Location tracking started")
}
static func stopTracking() {
if internalLocationTracker != nil {
internalLocationTracker!.stopLocationTracking()
print("Location tracking stopped")
}
}
}