我正在为大学作业创建一个非常简约的健身应用程序,该应用程序利用Google Maps API和Android步检测器传感器。
我无法解决的问题是如何将步数计数器重置为0。我已阅读Android网站上的文档,并了解直到重启设备后计数器才会重置。我已经阅读了先前提出的有关在程序首次启动时设置初始值的问题,但是并不能完全理解所讲的内容。此外,我已经阅读了SharedPreferences,但没有任何使用它们的经验。
我想要做的就是简单地使用onClickListener结合一个按钮将步骤重置为0。下面是我到目前为止的代码:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
TextView steps = (TextView) findViewById(R.id.step_taken);
if(isRunning){
steps.setText(String.valueOf(sensorEvent.values[0]));
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
public void stopSteps(){
SensorManager.unregisterListener(this);
Toast.makeText(this, "Step counter has been deactivated", Toast.LENGTH_SHORT).show();
}
public void startSteps(){
Sensor StepSensor = SensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
SensorManager.registerListener(this, StepSensor, android.hardware.SensorManager.SENSOR_DELAY_UI);
Toast.makeText(this, "Step counter has been activated", Toast.LENGTH_SHORT).show();
}
protected void onResume() {
super.onResume();
isRunning = true;
Sensor StepSensor = SensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
if(StepSensor != null){
SensorManager.registerListener(this, StepSensor, android.hardware.SensorManager.SENSOR_DELAY_UI);
} else{
Toast.makeText(this, "No sensor has been found", Toast.LENGTH_SHORT).show();
}
}
protected void onPause(){
super.onPause();
isRunning = false;
}
是否有一种简单的方法来实现重置功能?我快没时间了,真的很坚持。如果有人可以通过代码示例提供任何见解,我将不胜感激。 感谢您抽出宝贵的时间阅读这篇文章。
答案 0 :(得分:0)
您确实需要研究SharedPreferences
。您从sensorEvent.values[0]
获取的值是不可变的,因此您希望自己可以将该值存储在某个地方,而SharedPreferences
是迄今为止在配置更改中持久保存的最简单方法。
https://developer.android.com/training/data-storage/shared-preferences
答案 1 :(得分:0)
您可以将变量中返回的第一个值存储为初始值,然后从中减去后续值。
答案 2 :(得分:0)
无法将sensorEvent.values [0]重置为0,只有一种解决方法是重启设备,如Google Doc中所述。但是,在您的应用中进行步数计数的最佳方法是使用StepDetector传感器。这只是一个建议:)。您可以使用StepDetecor轻松重置计数步骤。我正在我的应用程序中使用它,它可以对步骤进行准确计数。
在OnCreate方法中初始化传感器。
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
if(sensorManager == null){
stopSelf();
Toast.makeText(this, "Sensor not found!", Toast.LENGTH_SHORT).show();
}
else{
Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
if(accel!=null){
sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL);
}
else{
Toast.makeText(this, "Sorry Sensor is not available!", Toast.LENGTH_LONG).show();
}
}
在onSensorChanged方法中,您可以使用它。
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
numSteps++;
saveSteps(numSteps);
}
}
在我正在执行的“ saveSteps”方法中:
editor = StepsCountingPrefs.edit();
editor.putString("WalkingSteps", String.valueOf(numSteps));
editor.apply();
用于重置步骤代码:
editor.putString("WalkingSteps","0");
editor.apply();
tv_steps.setText(String.valueOf(0));
numSteps=0;
答案 3 :(得分:0)
当您使用 STEP_DETECTOR 传感器时,您不必使用共享首选项,因为该传感器会在它(应用程序)打开时将计入的步数重置为零。