Activity detection in iOS - Activity Manager want to detect automotive activity in background,foreground and app terminate states

31 Views Asked by At

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")
    }
}
0

There are 0 best solutions below