protected override async Task OnReceiveAsync(Context?context, Intent?intent)
 {
     if (ActivityRecognitionResult.HasResult(intent) && Process != null)
     {
         var result = ActivityRecognitionResult.ExtractResult(intent);
         await Process(result);
     }
 }
Exemplo n.º 2
0
 protected override void OnHandleIntent(Intent intent)
 {
     UpdateMinConfidence();
     if (ActivityRecognitionResult.HasResult(intent))
     {
         HandleActivityRecognitionResult(intent);
     }
 }
Exemplo n.º 3
0
        void HandleActivityRecognition(Intent intent)
        {
            var result   = ActivityRecognitionResult.ExtractResult(intent);
            var activity = result.MostProbableActivity;

            TripDebugLog.LogActivityEvent(activity.Type, activity.Confidence);

            // We don't care about tilting activity
            if (activity.Type == DetectedActivity.Tilting)
            {
                return;
            }

            var prevBikingState = currentBikingState;

            switch (currentBikingState)
            {
            case BikingState.NotBiking:
                if (activity.Type == DetectedActivity.OnBicycle && activity.Confidence >= StrongConfidence)
                {
                    SetLocationUpdateEnabled(true);
                    currentBikingState = BikingState.Biking;
                }
                break;

            case BikingState.Biking:
                CheckDelayedFinishTripConditions(activity);
                break;

            case BikingState.MovingNotOnBike:
                if (activity.Type == DetectedActivity.OnBicycle && activity.Confidence >= StrongConfidence)
                {
                    currentBikingState = BikingState.Biking;
                    Interlocked.Increment(ref graceID);
                }
                break;

            case BikingState.InGrace:
                if (activity.Type == DetectedActivity.OnBicycle && activity.Confidence >= WeakConfidence)
                {
                    currentBikingState = BikingState.Biking;
                    Interlocked.Increment(ref graceID);
                }
                else
                {
                    CheckDelayedFinishTripConditions(activity);
                }
                break;
            }

            Log.Debug("ActivityHandler", "Activity ({0} w/ {1}%): {2} -> {3}",
                      activity.Type, activity.Confidence, prevBikingState, currentBikingState);

            if (prevBikingState != currentBikingState)
            {
                OnBikingStateChanged(prevBikingState, currentBikingState);
            }
        }
Exemplo n.º 4
0
        protected override void OnHandleIntent(Intent intent)
        {
            var result = ActivityRecognitionResult.ExtractResult(intent);

            if (result == null)
            {
                return;
            }

            var broadcastIntent = new Intent(Constants.BroadcastAction);

            broadcastIntent.PutExtra(Constants.ActivitiesExtra, result);
            LocalBroadcastManager.GetInstance(Application.Context).SendBroadcast(broadcastIntent);
        }
Exemplo n.º 5
0
        public override void OnReceive(Context context, Intent intent) => this.Execute(async() =>
        {
            // DELETE FROM motion_activity WHERE Timestamp < DateTimeOffset.UtcNow.AddDays(-30).Ticks
            if (!ActivityRecognitionResult.HasResult(intent))
            {
                return;
            }

            var result = ActivityRecognitionResult.ExtractResult(intent);
            var type   = MotionActivityType.Unknown;

            foreach (var activity in result.ProbableActivities)
            {
                switch (activity.Type)
                {
                case DetectedActivity.InVehicle:
                    type |= MotionActivityType.Automotive;
                    break;

                case DetectedActivity.OnBicycle:
                    type |= MotionActivityType.Cycling;
                    break;

                case DetectedActivity.OnFoot:
                    type |= MotionActivityType.Walking;
                    break;

                case DetectedActivity.Running:
                    type |= MotionActivityType.Running;
                    break;

                case DetectedActivity.Still:
                    type |= MotionActivityType.Stationary;
                    break;

                case DetectedActivity.Walking:
                    type |= MotionActivityType.Walking;
                    break;
                }
            }
            var confidence = this.ToConfidence(result.MostProbableActivity.Confidence);
            var timestamp  = DateTimeOffset.UtcNow.ToUnixTimeSeconds();

            await this.database.ExecuteNonQuery(
                $"INSERT INTO motion_activity(Event, Confidence, Timestamp) VALUES ({(int)type}, {(int)confidence}, {timestamp})"
                );
            this.messageBus.Publish(new MotionActivityEvent(type, confidence, DateTimeOffset.UtcNow));
        });
Exemplo n.º 6
0
        private void HandleActivityRecognitionResult(Intent intent)
        {
            var result = ActivityRecognitionResult.ExtractResult(intent);

            DetectedActivity activity = result.MostProbableActivity;
            int confidence            = activity.Confidence;

            if (IsConfident(confidence))
            {
                HandleDetectedActivity(activity);
            }
            else
            {
                Log.Verbose(Tag, $"Ignored detected activity ({activity.ToHumanText()}) because of low confidence ({confidence})");
            }
        }
        protected override void OnHandleIntent(Intent intent)
        {
            var result      = ActivityRecognitionResult.ExtractResult(intent);
            var localIntent = new Intent(Constants.BroadcastAction);

            IList <DetectedActivity> detectedActivities = result.ProbableActivities;

            Log.Info(TAG, "activities detected");
            foreach (DetectedActivity da in detectedActivities)
            {
                Log.Info(TAG, Constants.GetActivityString(
                             ApplicationContext, da.Type) + " " + da.Confidence + "%"
                         );
            }

            localIntent.PutExtra(Constants.ActivityExtra, detectedActivities.ToArray());
            LocalBroadcastManager.GetInstance(this).SendBroadcast(localIntent);
        }
Exemplo n.º 8
0
        bool OnHandleIntent(Intent intent)
        {
            if (intent != null)
            {
                if (intent.Action == FinishTripAction)
                {
                    FinishTrip();
                }
                else if (ActivityRecognitionResult.HasResult(intent))
                {
                    HandleActivityRecognition(intent);
                }
                else if (intent.HasExtra(FusedLocationProviderApi.KeyLocationChanged))
                {
                    HandleLocationUpdate(intent);
                }
            }

            return(currentBikingState != BikingState.NotBiking);
        }
Exemplo n.º 9
0
        protected override void OnHandleIntent(Intent intent)
        {
            var result = ActivityRecognitionResult.ExtractResult(intent);

            IList <DetectedActivity> detectedActivities = result.ProbableActivities;

            PreferenceManager.GetDefaultSharedPreferences(this)
            .Edit()
            .PutString(Constants.KeyDetectedActivities,
                       Utils.DetectedActivitiesToJson(detectedActivities))
            .Apply();

            Log.Info(TAG, "activities detected");
            foreach (DetectedActivity da in detectedActivities)
            {
                Log.Info(TAG, Utils.GetActivityString(
                             ApplicationContext, da.Type) + " " + da.Confidence + "%"
                         );
            }
        }
Exemplo n.º 10
0
        private static DetectedMotion GetMostProbableMotion(ActivityRecognitionResult activityResult)
        {
            const int        threshold = 5;
            DetectedActivity first     = activityResult.MostProbableActivity;
            int type = first.Type;

            // OnFoot activity is sent for all motion activities, it's redundant so we remove it...
            if (type == DetectedActivity.OnFoot)
            {
                DetectedActivity second = activityResult.ProbableActivities.Where(da => da.Type != DetectedActivity.OnFoot)
                                          .DefaultIfEmpty()
                                          .Aggregate((max, x) => max.Confidence < x.Confidence ? x : max);

                if (second != null && second.Confidence >= first.Confidence - threshold)
                {
                    return(new DetectedMotion(second.Confidence, second.GetMotionType()));
                }
            }

            return(new DetectedMotion(first.Confidence, first.GetMotionType()));
        }
Exemplo n.º 11
0
        public override void OnReceive(Context context, Intent intent)
        {
            base.OnReceive(Application.Context, intent);

            if (ActivityRecognitionResult.HasResult(intent))
            {
                ActivityRecognitionResult result = ActivityRecognitionResult.ExtractResult(intent);
                if (result != null)
                {
                    var motion = result.MostProbableActivity.GetMotionType();
                    if (motion != Core.Models.MotionType.Unknown)
                    {
                        Mvx.Resolve <IMotionActivity>().MotionType = motion;
                    }

                    //new Handler(context.MainLooper).Post(() =>
                    //{
                    //    Toast.MakeText(context, motion.ToString(), ToastLength.Short).Show();
                    //});
                }
            }
        }
Exemplo n.º 12
0
 public static DateTime GetDateTime(this ActivityRecognitionResult result)
 {
     return(ReferenceDate.AddMilliseconds(result.Time));
 }