Java 计算速度类型计数器步进传感器
我很快就要完成我的项目了,它涉及到计算步数、覆盖距离和计算速度。我正在使用TYPE_COUNTER_STEP sensor来计算步长,并使用公式来计算距离,即男性为0.415,女性为0.413,通过乘以身高来计算脚长。到目前为止,一切正常,但我无法计算速度。我不知道如何计算,我的意思是我知道s=vt,但我需要时间来获得速度/步长。任何人都知道如何做到这一点。这是我项目的最后一部分。我也在网上找过,但我没有找到计算时间的工作方法。有人建议我使用时间戳,但我使用了,但不幸的是,我得到的是无限文本而不是速度 我无法使用GPS计算速度,因为GPS并非始终可用,即隧道内或地下等Java 计算速度类型计数器步进传感器,java,android,Java,Android,我很快就要完成我的项目了,它涉及到计算步数、覆盖距离和计算速度。我正在使用TYPE_COUNTER_STEP sensor来计算步长,并使用公式来计算距离,即男性为0.415,女性为0.413,通过乘以身高来计算脚长。到目前为止,一切正常,但我无法计算速度。我不知道如何计算,我的意思是我知道s=vt,但我需要时间来获得速度/步长。任何人都知道如何做到这一点。这是我项目的最后一部分。我也在网上找过,但我没有找到计算时间的工作方法。有人建议我使用时间戳,但我使用了,但不幸的是,我得到的是无限文本而不
谢谢
package com.lijianzhong13354146.coeur1;
导入android.app.Activity;
导入android.content.Context;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.graphics.Color;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.Message;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.text.format.DateUtils;
导入android.view.Display;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.concurrent.TimeUnit;
公共类AccurateStepCounter扩展AppCompative活动{
私有长时间戳;
私有TextView textViewStepCounter;
私有文本视图文本视图步骤检测器;
私有线程detectorTimeStampUpdaterThread;
私人经办人;
工具栏;
私人按钮按钮;
文本视图步长值;
文本视图距离值;
文本视图距离标题;
int getCurrentStepValue;
int-actualStepTaken;
SharedReferences SharedReferences;
SharedReferences.Editor;
SharedReferencesSharedReferencesFromSetting;
SharedReferences.Editor编辑器编辑器FromSetting;
私有布尔值isRunning=true;
ArrayList ArrayList;
人高;
双吸人高度;
双步长;
SharedReferences获取SharedReferencesHeight;
编辑器getEditoHeight;
双时间键;
SharedReferencesSharedReferencesGetGender;
SharedReferences.Editor editorGetGender;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u精确的步进计数器);
buttonStop=(按钮)findViewById(R.id.buttonStop);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
stepValue=(TextView)findViewById(R.id.step_值);
距离值=(TextView)findViewById(R.id.distance\u值);
arrayList=新的arrayList();
SharedReferences=GetSharedReferences(“保存信息”,模式为私有);
SharedReferencesFromSetting=GetSharedReferences(“EmailSave”,模式\私人);
sharedPreferencesGetGender=getSharedPreferences(“保存信息”,模式为私有);
GetSharedReferencesHeight=GetSharedReferences(“高度”,模式\私有);
distanceTitle=(TextView)findViewById(R.id.distance\u title);
gettingPersonHeightInDoule=Double.parseDouble(
getSharedReferencesHeight.getString(“saveHeight”,“0”)/100;
if(sharedPreferencesGetGender.getString(“性别”,null).equals(“男性”)){
步进长度=0.415*获取人员高度单位;
}否则{
步进长度=0.413*获取人员高度单位;
}
工具栏配置();
MediaPlayer mediaPlayer1=MediaPlayer.create(this,R.raw.boom);
mediaPlayer1.start();
传感器注册人();
onStopButtonClick();
//setupDetectorTimeStamppupDaterThread();
}
@凌驾
public void onBackPressed(){
}
公共无效OnStopButton单击(){
buttonStop.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int actualSteps=getCurrentStepValue-arrayList.get(0);
editor=SharedReferences.edit();
editor.putString(“步骤”,String.valueOf(actualSteps));
commit();
startActivity(新意图(AccurateStepCounter.this,FinalResultDisplay.class));
}
});
}
公共空工具栏配置(){
setTitle(getResources().getString(R.string.app_title));
工具栏。设置子标题(“计步器”);
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
设置支持操作栏(工具栏);
}
传感器的公共无效登记处(){
SensorManager sManager=(SensorManager)getSystemService(Context.SENSOR\u SERVICE);
//步进计数器
sManager.registerListener(新的SensorEventListener(){
@凌驾
传感器更改时的公共无效(传感器事件){
步骤=新步骤(event.values[0],System.currentTimeMillis());
arrayList.add(步骤);
getCurrentStepValue=(int)步骤。getStep();
setText(getCurrentStepValue-arrayList.get(0)+“”);
double distaneCovered=步长*(getCurrentStepValue-arrayList.get(0));
package com.lijianzhong13354146.coeur1;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.format.DateUtils;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.TimeUnit;
public class AccurateStepCounter extends AppCompatActivity {
private long timestamp;
private TextView textViewStepCounter;
private TextView textViewStepDetector;
private Thread detectorTimeStampUpdaterThread;
private Handler handler;
Toolbar toolbar ;
private Button buttonStop ;
TextView stepValue ;
TextView distanceValue ;
TextView distanceTitle ;
int getCurrentStepValue ;
int actualStepTaken ;
SharedPreferences sharedPreferences ;
SharedPreferences.Editor editor ;
SharedPreferences sharedPreferencesFromSetting ;
SharedPreferences.Editor editorFromSetting ;
private boolean isRunning = true;
ArrayList<Step> arrayList ;
String gettingPersonHeight ;
double gettingPersonHeightInDoule ;
double step_length ;
SharedPreferences getSharedPreferencesHeight ;
SharedPreferences.Editor getEditoHeight ;
double timeInSecond ;
SharedPreferences sharedPreferencesGetGender ;
SharedPreferences.Editor editorGetGender;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_accurate_step_counter);
buttonStop = (Button) findViewById(R.id.buttonSTOP);
toolbar = (Toolbar) findViewById(R.id.toolbar);
stepValue = (TextView) findViewById(R.id.step_value);
distanceValue = (TextView) findViewById(R.id.distance_value);
arrayList = new ArrayList<>();
sharedPreferences = getSharedPreferences("saveInformation" , MODE_PRIVATE) ;
sharedPreferencesFromSetting = getSharedPreferences("EmailSave" , MODE_PRIVATE);
sharedPreferencesGetGender = getSharedPreferences("saveInformation" , MODE_PRIVATE);
getSharedPreferencesHeight = getSharedPreferences("Height" , MODE_PRIVATE);
distanceTitle = (TextView) findViewById(R.id.distance_title);
gettingPersonHeightInDoule = Double.parseDouble(
getSharedPreferencesHeight.getString("saveHeight" , "0"))/100;
if (sharedPreferencesGetGender.getString("GENDER" , null).equals("Male") ){
step_length = 0.415 * gettingPersonHeightInDoule ;
}else {
step_length = 0.413 * gettingPersonHeightInDoule ;
}
ToolbarConfig();
MediaPlayer mediaPlayer1 = MediaPlayer.create(this , R.raw.boom);
mediaPlayer1.start();
registerForSensorEvents();
onStopButtonClick();
// setupDetectorTimestampUpdaterThread();
}
@Override
public void onBackPressed() {
}
public void onStopButtonClick () {
buttonStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int actualSteps = getCurrentStepValue - arrayList.get(0);
editor = sharedPreferences.edit() ;
editor.putString("STEPS" , String.valueOf(actualSteps));
editor.commit() ;
startActivity(new Intent(AccurateStepCounter.this , FinalResultDisplay.class));
}
});
}
public void ToolbarConfig () {
toolbar.setTitle(getResources().getString(R.string.app_title));
toolbar.setSubtitle("Pedometer");
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
setSupportActionBar(toolbar);
}
public void registerForSensorEvents() {
SensorManager sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
// Step Counter
sManager.registerListener(new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
Step step = new Step(event.values[0], System.currentTimeMillis());
arrayList.add(step);
getCurrentStepValue = (int) step.getStep();
stepValue.setText(getCurrentStepValue - arrayList.get(0) + "");
double distaneCovered = step_length * (getCurrentStepValue - arrayList.get(0));
// the elapsed time beetween 2 step will be:
if (arrayList.size() > 2) {
Step lastStep = arrayList.get(arrayList.size() - 1);
Step previousStep = arrayList.get(arrayList.size() - 2);
long msElapsedTime = lastStep.getTimestamp() - previousStep.getTimestamp();
timeInSecond = TimeUnit.MILLISECONDS.toSeconds(msElapsedTime);
}
double getVelocity = distaneCovered / timeInSecond ;
// distanceTitle shows the speed for now
distanceTitle.setText(getVelocity + " m/s");
distanceValue.setText("" + distaneCovered);
/* float steps = event.values[0];
arrayList.add((int)steps);
getCurrentStepValue = (int) steps ;
double distanceCovered = (step_length * (getCurrentStepValue - arrayList.get(0))) /1000;
stepValue.setText(getCurrentStepValue - arrayList.get(0) + "");
distanceValue.setText("" + String.format("%.2f" , distanceCovered));*/
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}, sManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),
SensorManager.SENSOR_DELAY_FASTEST);
}
}
class Step {
private float step;
private long timestamp;
Step (float step , long timestamp) {
this.step = step;
this.timestamp = timestamp ;
}
public void setStep(float step) {
this.step = step;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public float getStep() {
return step;
}
public long getTimestamp() {
return timestamp;
}
// getters
// setters
}
public class Step {
private float step;
private long timestamp;
// constructor
// getters
// setters
}
@Override
public void onSensorChanged(SensorEvent event) {
Step step = new Step(event.values[0], System.currentTimeMillis());
arrayList.add(step);
getCurrentStepValue = (int) step.getStep();
stepValue.setText(getCurrentStepValue - arrayList.get(0) + "");
double distaneCovered = step_length * (getCurrentStepValue - arrayList.get(0));
// the elapsed time beetween 2 step will be:
if (arrayList.size() > 2) {
Step lastStep = arrayList.get(arrayList.size() - 1);
Step previousStep = arrayList.get(arrayList.size() - 2);
long msElapsedTime = lastStep.getTimestamp() - previousStep.getTimestamp();
}
distanceValue.setText("" + distaneCovered);
}