Ejemplo n.º 1
0
        List <Activity> CreateActivityDataWithActivities(CMMotionActivity[] activities, Action completionHandler)
        {
            var results = new List <Activity> ();

            var group = DispatchGroup.Create();
            var queue = new DispatchQueue("resultQueue");

            var filteredActivities = activities.Where(activity => activity.HasActivitySignature() &&
                                                      !activity.Stationary &&
                                                      activity.Confidence != CMMotionActivityConfidence.Low).ToArray <CMMotionActivity> ();

            var activitySegments = FindActivitySegments(filteredActivities);

            foreach (var segment in activitySegments)
            {
                group.Enter();
                pedometer.QueryPedometerData(segment.Item1.StartDate, (NSDate)segment.Item2, (pedometerData, error) => {
                    queue.DispatchAsync(() => {
                        var activity = new Activity(segment.Item1,
                                                    ((DateTime)segment.Item1.StartDate).ToLocalTime(),
                                                    segment.Item2.ToLocalTime(),
                                                    pedometerData);

                        results.Add(activity);
                    });

                    if (error != null)
                    {
                        HandleError(error);
                    }

                    group.Leave();
                });
            }

            group.Notify(DispatchQueue.MainQueue, () => {
                queue.DispatchSync(() => {
                    RecentActivities = results;
                    RecentActivities.Reverse();
                    completionHandler?.Invoke();
                });
            });

            return(results);
        }