首页 > 解决方案 > 我想得到一个开始迈出一步的时间,然后时间停止,然后得到两者的差异。我该怎么做

问题描述

下面是我写的代码,虽然我只能看到调用暂停的时间。这段代码是用来计算步数的每分钟,提前谢谢。

`   import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import static android.content.ContentValues.TAG;

    public class Activity extends Fragment implements SensorEventListener{

        private static final double NOISE = 2.0 ;
        private SensorManager sensorManager;
        private Sensor accelerometer;
        double X,Y,Z;
        double lastX, lastY, lastZ;
        double deltaX, deltaY, deltaZ;
        private int threshold; // point at which we want to trigger a step.
        private boolean mInitialized;
        int stepsCount=0;
        int cadence;
        int run,walk,passive;
        String time1,time2 , time3;
        int diffInSec;

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
           View view = inflater.inflate(R.layout.activity, container, false);
           //get time
           //pie chart.
       //     int values [] = ( run )
            threshold=20;

    //initialize the variables
            mInitialized = false;

            //get the sensor manager

            sensorManager = (SensorManager)getActivity().getSystemService(getActivity().SENSOR_SERVICE);

            //get accelerometer sensor.
            accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
            startSensor();

           return view;
        }

        private void startSensor() {

            //register a listener
            sensorManager.registerListener(Activity.this, accelerometer ,SensorManager.SENSOR_DELAY_NORMAL);



        }

        @Override
        public void onSensorChanged(SensorEvent sensorEvent) {

            // alpha is calculated as t / (t + dT)
            // with t, the low-pass filter's time-constant
            // and dT, the event delivery rate

            final double alpha = 0.8; // constant for our filter below

            double[] gravity = {0, 0, 0};

            // Isolate the force of gravity with the low-pass filter.
            gravity[0] = alpha * gravity[0] + (1 - alpha) * sensorEvent.values[0];
            gravity[1] = alpha * gravity[1] + (1 - alpha) * sensorEvent.values[1];
            gravity[2] = alpha * gravity[2] + (1 - alpha) * sensorEvent.values[2];

            // Log.d(TAG,"GRAVITY: X:" +  gravity[0] + "Y:" +  gravity[1] + "Z:" + gravity[2] );


            // Remove the gravity contribution with the high-pass filter.
            X = sensorEvent.values[0] - gravity[0];
            Y = sensorEvent.values[1] - gravity[1];
            Z = sensorEvent.values[2] - gravity[2];

            //Log.d(TAG,"X:" + X + "Y:" + Y + "Z:" + Z);
            if (!mInitialized){


                //sensor is used for the first time, initialize the last read values

                lastX = X;
                lastY = Y;
                lastZ = Z;
                mInitialized = true;
            }else {

                // sensor is already initialized, and we have previously read values.
                // take difference of past and current values and decide which
                // axis acceleration was detected by comparing values

                deltaX = Math.abs(lastX - X);
                deltaY = Math.abs(lastY - Y);
                deltaZ = Math.abs(lastZ - Z);

                // Log.d(TAG,"X:"+ deltaX + "Y:" + deltaY + "Z:" + deltaZ);

                if (deltaX < NOISE)
                    deltaX = (float) 0.0;
                if (deltaY < NOISE)
                    deltaY = (float) 0.0;

                if (deltaZ < NOISE)
                    deltaZ = (float) 0.0;


                if (deltaX > deltaY  &&  deltaX>deltaZ && (deltaX>threshold))  {
                    stepsCount++;
                    //get time as at now.

                  //String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
                  // time1 = timeStamp;


                    // Horizontal shake

                } else if (deltaY > deltaX && deltaY>deltaZ &&(deltaY>threshold)) {
                    stepsCount++;
                    //get time as at now.

                 // String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
                 // time1 = timeStamp;


                    // Vertical shake
                } else if ( deltaZ>deltaY && deltaZ>deltaX && (deltaZ>threshold)){

                    stepsCount++;

                   // String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
                   // time1 = timeStamp;

                   // Log.d(TAG, "COUNT:" + stepsCount )

                    //Get the speed your leg moves. This is measured in number of steps per minute (spm) and it is known as cadence.
                    //The average cadence of a walking person is 100 to 115 spm and while running it is 120 spm and above.
                    //detect whether someone is running,walking or idle.

                    //get time difference to get the time taken
                }



            }if (stepsCount==1){

                String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());
                time1 = timeStamp;
                Log.d(TAG, "COUNT:" + time1 );
            }

        }
        @Override
        public void onPause(){
            super.onPause();
           String timeStamp = new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime());

           time2 = timeStamp;
         //   Log.d(TAG,"TIME:" + time2);

          //  sensorManager.unregisterListener(this);
            // put your code here...

        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {

        }
    }
    `

标签: javaandroid

解决方案


推荐阅读