示例#1
0
        internal static async Task <PermissionStatus> RequestSensorsPermission()
        {
            if (SensorsPermissionStatus != PermissionStatus.Unknown)
            {
                return(SensorsPermissionStatus);
            }

#if __IOS__
            var activityManager = new CMMotionActivityManager();

            try
            {
                var results = await activityManager.QueryActivityAsync(NSDate.DistantPast, NSDate.DistantFuture, NSOperationQueue.MainQueue);

                if (results != null)
                {
                    return(PermissionStatus.Granted);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to query activity manager: " + ex.Message);
                return(PermissionStatus.Denied);
            }
#endif

            return(PermissionStatus.Unknown);
        }
示例#2
0
        async Task <PermissionStatus> RequestSensorsPermission()
        {
            if (CMMotionActivityManager.IsActivityAvailable)
            {
                return(PermissionStatus.Granted);
            }

            if (activityManager == null)
            {
                activityManager = new CMMotionActivityManager();
            }

            try
            {
                var results = await activityManager.QueryActivityAsync(NSDate.DistantPast, NSDate.DistantFuture, NSOperationQueue.MainQueue).ConfigureAwait(false);

                if (results != null)
                {
                    return(PermissionStatus.Granted);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to query activity manager: " + ex.Message);
                return(PermissionStatus.Denied);
            }

            return(PermissionStatus.Unknown);
        }
示例#3
0
        public MotionManager()
        {
            RecentActivities       = new List <Activity> ();
            recentMotionActivities = new List <CMMotionActivity> ();
            recentPedometerData    = new List <CMPedometerData> ();
            recentAltitudeData     = new List <CMAltitudeData> ();

            activityManager = new CMMotionActivityManager();
            pedometer       = new CMPedometer();
            altimeter       = new CMAltimeter();
        }
示例#4
0
        public DeviceSensor()
        {
            motionManager         = new CMMotionManager();
            locationManager       = new CLLocationManager();
            motionActivityManager = new CMMotionActivityManager();

            if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            {
                altimeter = new CMAltimeter();
            }

            sensorTypeStatus = new Dictionary <SensorType, bool>()
            {
                {
                    SensorType.Accelerometer,
                    false
                },
                {
                    SensorType.Compass,
                    false
                },
                {
                    SensorType.Gyroscope,
                    false
                },
                {
                    SensorType.Magntometer,
                    false
                },

                /* {
                 *   SensorType.ActivitySensor,
                 *   false
                 * }*/
            };
        }
示例#5
0
        protected override IEnumerable <Datum> Poll(CancellationToken cancellationToken)
        {
            List <Datum> data = new List <Datum>();

            // if this is the first poll (no existing query start time), set the query start time to the current time. we
            // used to set this to the maximally previous time per ios documentation (7 days), but this (1) causes issues
            // when triggering surveys on the basis of these activities (there might be hundreds of activities within the
            // past 7 days), and it also runs counter to the user's expectations that data will only be collected from the
            // time at which they have enrolled in the study and not from times prior.
            if (_queryStartTime == null)
            {
                _queryStartTime = DateTimeOffset.UtcNow;
            }

            ManualResetEvent queryWait = new ManualResetEvent(false);

            SensusContext.Current.MainThreadSynchronizer.ExecuteThreadSafe(() =>
            {
                try
                {
                    CMMotionActivityManager activityManager = new CMMotionActivityManager();

                    activityManager.QueryActivity(_queryStartTime.Value.UtcDateTime.ToNSDate(), NSDate.Now, NSOperationQueue.CurrentQueue, (activities, error) =>
                    {
                        try
                        {
                            if (error == null)
                            {
                                // process each activity, keeping track of most recent
                                NSDate mostRecentActivityStartTime = null;
                                foreach (CMMotionActivity activity in activities)
                                {
                                    DateTimeOffset timestamp = new DateTimeOffset(activity.StartDate.ToDateTime(), TimeSpan.Zero);

                                    #region get confidence
                                    double confidence = 0;

                                    if (activity.Confidence == CMMotionActivityConfidence.Low)
                                    {
                                        confidence = 0.1;
                                    }
                                    else if (activity.Confidence == CMMotionActivityConfidence.Medium)
                                    {
                                        confidence = 0.5;
                                    }
                                    else if (activity.Confidence == CMMotionActivityConfidence.High)
                                    {
                                        confidence = 1;
                                    }
                                    else
                                    {
                                        SensusException.Report("Unrecognized confidence:  " + activity.Confidence);
                                    }
                                    #endregion

                                    #region get activities
                                    Action <Activities> AddActivityDatum = activityType =>
                                    {
                                        ActivityDatum activityDatum = new ActivityDatum(timestamp, activityType, ActivityPhase.Starting, ActivityState.Active, confidence);
                                        data.Add(activityDatum);
                                    };

                                    if (activity.Stationary)
                                    {
                                        AddActivityDatum(Activities.Still);
                                    }

                                    if (activity.Walking)
                                    {
                                        AddActivityDatum(Activities.Walking);
                                    }

                                    if (activity.Running)
                                    {
                                        AddActivityDatum(Activities.Running);
                                    }

                                    if (activity.Automotive)
                                    {
                                        AddActivityDatum(Activities.InVehicle);
                                    }

                                    if (activity.Cycling)
                                    {
                                        AddActivityDatum(Activities.OnBicycle);
                                    }

                                    if (activity.Unknown)
                                    {
                                        AddActivityDatum(Activities.Unknown);
                                    }
                                    #endregion

                                    if (mostRecentActivityStartTime == null)
                                    {
                                        mostRecentActivityStartTime = activity.StartDate;
                                    }
                                    else
                                    {
                                        mostRecentActivityStartTime = mostRecentActivityStartTime.LaterDate(activity.StartDate);
                                    }
                                }

                                // set the next query start time one second after the most recent activity's start time
                                if (mostRecentActivityStartTime != null)
                                {
                                    _queryStartTime = new DateTime(mostRecentActivityStartTime.ToDateTime().Ticks, DateTimeKind.Utc).AddSeconds(1);
                                }
                            }
                            else
                            {
                                throw new Exception("Error while querying activities:  " + error);
                            }
                        }
                        catch (Exception ex)
                        {
                            SensusServiceHelper.Get().Logger.Log("Exception while querying activities:  " + ex, LoggingLevel.Normal, GetType());
                        }
                        finally
                        {
                            queryWait.Set();
                        }
                    });
                }
                catch (Exception ex)
                {
                    SensusServiceHelper.Get().Logger.Log("Exception while querying activities:  " + ex, LoggingLevel.Normal, GetType());
                    queryWait.Set();
                }
            });

            WaitHandle.WaitAny(new[] { queryWait, cancellationToken.WaitHandle });

            return(data);
        }
        //public bool IsAutomove {
        //	get {
        //		return MotionType == MotionType.Automotive;
        //	}
        //}

        public TouchMotionActivity()
        {
            _motionActivityManager = new CMMotionActivityManager();
        }
		void initMotionActivity ()
		{
			motionActivityMgr = new CMMotionActivityManager ();
			pedometer = new CMPedometer ();
		}
示例#8
0
 public MotionActivityImpl()
 {
     this.activityManager = new CMMotionActivityManager();
     //this.activityManager.QueryActivityAsync
 }
示例#9
0
        public ActivityRecognizerImplementation()
        {
            this.MotionActivityManager = new CMMotionActivityManager();

            InitMotionDetectedObservable();
        }
示例#10
0
        protected override IEnumerable <Datum> Poll(CancellationToken cancellationToken)
        {
            List <Datum> data = new List <Datum>();

            if (_queryStartTime == null)
            {
                _queryStartTime = DateTimeOffset.UtcNow.AddDays(-7);  // only the last 7 days of activities are stored:  https://developer.apple.com/documentation/coremotion/cmmotionactivitymanager/1615929-queryactivitystarting
            }

            ManualResetEvent queryWait = new ManualResetEvent(false);

            SensusContext.Current.MainThreadSynchronizer.ExecuteThreadSafe(() =>
            {
                try
                {
                    CMMotionActivityManager activityManager = new CMMotionActivityManager();

                    activityManager.QueryActivity(_queryStartTime.Value.UtcDateTime.ToNSDate(), NSDate.Now, NSOperationQueue.CurrentQueue, (activities, error) =>
                    {
                        try
                        {
                            if (error == null)
                            {
                                // process each activity, keeping track of most recent
                                NSDate mostRecentActivityStartTime = null;
                                foreach (CMMotionActivity activity in activities)
                                {
                                    DateTimeOffset timestamp = new DateTimeOffset(activity.StartDate.ToDateTime(), TimeSpan.Zero);

                                    #region get confidence
                                    double confidence = 0;

                                    if (activity.Confidence == CMMotionActivityConfidence.Low)
                                    {
                                        confidence = 0;
                                    }
                                    else if (activity.Confidence == CMMotionActivityConfidence.Medium)
                                    {
                                        confidence = 0.5;
                                    }
                                    else if (activity.Confidence == CMMotionActivityConfidence.High)
                                    {
                                        confidence = 1;
                                    }
                                    else
                                    {
                                        SensusException.Report("Unrecognized confidence:  " + activity.Confidence);
                                    }
                                    #endregion

                                    #region get activities
                                    Action <Activities> AddActivityDatum = activityType =>
                                    {
                                        ActivityDatum activityDatum = new ActivityDatum(timestamp, activityType, ActivityPhase.During, ActivityState.Active, confidence);
                                        data.Add(activityDatum);
                                    };

                                    if (activity.Stationary)
                                    {
                                        AddActivityDatum(Activities.Still);
                                    }

                                    if (activity.Walking)
                                    {
                                        AddActivityDatum(Activities.Walking);
                                    }

                                    if (activity.Running)
                                    {
                                        AddActivityDatum(Activities.Running);
                                    }

                                    if (activity.Automotive)
                                    {
                                        AddActivityDatum(Activities.InVehicle);
                                    }

                                    if (activity.Cycling)
                                    {
                                        AddActivityDatum(Activities.OnBicycle);
                                    }

                                    if (activity.Unknown)
                                    {
                                        AddActivityDatum(Activities.Unknown);
                                    }
                                    #endregion

                                    if (mostRecentActivityStartTime == null)
                                    {
                                        mostRecentActivityStartTime = activity.StartDate;
                                    }
                                    else
                                    {
                                        mostRecentActivityStartTime = mostRecentActivityStartTime.LaterDate(activity.StartDate);
                                    }
                                }

                                // set the next query start time one second after the most recent activity's start time
                                if (mostRecentActivityStartTime != null)
                                {
                                    _queryStartTime = new DateTime(mostRecentActivityStartTime.ToDateTime().Ticks, DateTimeKind.Utc).AddSeconds(1);
                                }
                            }
                            else
                            {
                                SensusServiceHelper.Get().Logger.Log("Error while querying activities:  " + error, LoggingLevel.Normal, GetType());
                            }
                        }
                        catch (Exception ex)
                        {
                            SensusServiceHelper.Get().Logger.Log("Exception while querying activities:  " + ex, LoggingLevel.Normal, GetType());
                        }
                        finally
                        {
                            queryWait.Set();
                        }
                    });
                }
                catch (Exception ex)
                {
                    SensusServiceHelper.Get().Logger.Log("Exception while querying activities:  " + ex, LoggingLevel.Normal, GetType());
                    queryWait.Set();
                }
            });

            WaitHandle.WaitAny(new[] { queryWait, cancellationToken.WaitHandle });

            return(data);
        }
        async Task<PermissionStatus> RequestSensorsPermission()
        {
            if (CMMotionActivityManager.IsActivityAvailable)
                return PermissionStatus.Granted;

            if (activityManager == null)
                activityManager = new CMMotionActivityManager();

            try
            {
                var results = await activityManager.QueryActivityAsync(NSDate.DistantPast, NSDate.DistantFuture, NSOperationQueue.MainQueue).ConfigureAwait(false);
                if(results != null)
                    return PermissionStatus.Granted;
            }
            catch(Exception ex)
            {
                Console.WriteLine("Unable to query activity manager: " + ex.Message);
                return PermissionStatus.Denied;
            }

            return PermissionStatus.Unknown;
        }
示例#12
0
 void initMotionActivity()
 {
     motionActivityMgr = new CMMotionActivityManager();
     pedometer         = new CMPedometer();
 }
示例#13
0
 public MotionActivityManagerImpl()
 {
     this.activityManager = new CMMotionActivityManager();
 }
示例#14
0
		public MotionManager ()
		{
			RecentActivities = new List<Activity> ();
			recentMotionActivities = new List<CMMotionActivity> ();
			recentPedometerData = new List<CMPedometerData> ();
			recentAltitudeData = new List<CMAltitudeData> ();

			activityManager = new CMMotionActivityManager ();
			pedometer = new CMPedometer ();
			altimeter = new CMAltimeter ();
		}
示例#15
0
        public ExtraPermission(CMMotionActivityManager activityManager)

        {
            _activityManager = activityManager ?? throw new ArgumentNullException(nameof(activityManager));
        }