如何重置计步器?

时间:2019-04-09 16:09:50

标签: android

我正在为大学作业创建一个非常简约的健身应用程序,该应用程序利用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;
}

是否有一种简单的方法来实现重置功能?我快没时间了,真的很坚持。如果有人可以通过代码示例提供任何见解,我将不胜感激。 感谢您抽出宝贵的时间阅读这篇文章。

4 个答案:

答案 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 传感器时,您不必使用共享首选项,因为该传感器会在它(应用程序)打开时将计入的步数重置为零。