java - 我想得到一个开始迈出一步的时间,然后时间停止,然后得到两者的差异。我该怎么做
问题描述
下面是我写的代码,虽然我只能看到调用暂停的时间。这段代码是用来计算步数的每分钟,提前谢谢。
` 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) {
}
}
`
解决方案
推荐阅读
- java - 降低新 JVM 的性能
- mysql - Spring Boot 多数据库从辅助数据库中提供空值
- python - 如何优化 Project Euler 的第 12 个问题(找到第一个有 500 个除数的三角形数)?
- tizen-wearable-sdk - 三星 Galaxy Store 卖家门户 - 如何修改 Tizen 应用程序的“版本代码”
- php - 在 WooCommerce 中更新自定义订单项元数据
- python - 用另一个列表中的值替换列表的开头
- python - 在 AWS S3 中分块创建大型 zip 文件
- sql - Snowflake SQL REGEXP - 在文件扩展名之前的连字符之后捕获
- javascript - 从日期和时间中减去小时数
- python - 我该如何修复(没有这样的列:可用性)错误???当我运行此代码时,我收到此错误:没有这样的列:可用性