Created the location manager in that I will fetch Significant Location Changes. In that location delegate didupdate location method I am calling activity manager.
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
self.startActivityUpdates()
let userLocation:CLLocation = locations[0] as CLLocation
let center = CLLocationCoordinate2D(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
if automotive && updateLocation
{
tripcoords.append(center)
}
}
In that activity manager I am detecting whether activity is automotive. If automative means I am updating location in tripcoords array.
func startActivityUpdates() {
if CMMotionActivityManager.isActivityAvailable() {
let historyDuration = 5 // Set history duration to 60 seconds
activityManager.queryActivityStarting(from: Date(timeIntervalSinceNow: -TimeInterval(historyDuration)), to: Date(), to: motionQueue) { [weak self] (activities, error) in
guard let activities = activities, error == nil else {
print("Error querying activities: \(error?.localizedDescription ?? "Unknown error")")
return
}
if let latestActivity = activities.last {
DispatchQueue.main.async {
self?.handleActivity(latestActivity)
}
}
}
} else {
print("Activity updates not available")
}
}
Some times the location updates in the trips array some times missing. Kindly help me to get. Thanks in advance!
func handleActivity(_ activity: CMMotionActivity) {
var activityString = ""
if activity.stationary {
self.updateLocation = true
activityString = "Stationary"
} else if activity.walking {
print("Walking")
self.endTrip = true
self.updateCompletedTrips()
activityString = "Walking"
} else if activity.running {
self.endTrip = true
self.updateCompletedTrips()
activityString = "Running"
} else if activity.automotive {
print("Automotive new method")
self.endTrip = false
self.startTripTime = self.startTripTime == "" ? Date.getCurrentDate(dateformat: true) : self.startTripTime
self.automotive = true
self.updateLocation = true
activityString = "Automotive"
} else if activity.cycling {
print("Cycling")
self.endTrip = true
self.updateCompletedTrips()
activityString = "Cycling"
} else if activity.unknown {
print("Unknown activity")
}
}