java - 我的计步器不会重置步数,​​即使在卸载后也是如此

标签 java android android-sensors sensormanager

我使用 Sensor.TYPE_STEP_COUNTER 我知道它只会在重新启动时重置。有没有其他方法可以在按下按钮时将步数重置为 0?

请看我的代码,你会找到Runactivity.class

也许我可以用另一种方式来重置步骤。 无需我每次都重新启动。

public class RunActivity extends AppCompatActivity implements SensorEventListener{

    private SensorManager sensorManager;
    private TextView count;
    boolean activityRunning;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_run);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        Bundle bundle = getIntent().getExtras();
        final String naam   = bundle.getString("naam");
        TextView NaamView = null;

        Button stopRun = (Button) findViewById(R.id.stopRun);

        count = (TextView) findViewById(R.id.countView);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        NaamView =  (TextView) findViewById(R.id.naamRunText);

        NaamView.setText(naam);

        stopRun.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String countValue = count.getText().toString();



                Log.d("countVAL", String.valueOf(countValue));


                Intent myIntent = new Intent(RunActivity.this, HomeScreenActivity.class);

                Bundle bundle = new Bundle();


                bundle.putString("naam", naam);
                sensorManager.flush(RunActivity.this);
                sensorManager.unregisterListener(RunActivity.this);
                count.setText("0");
                onStop();

                myIntent.putExtras(bundle);

                startActivity(myIntent);


            }
        });

    }



    @Override
    protected void onResume() {
        super.onResume();
        activityRunning = true;
        Sensor countSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
        if(countSensor != null){
            sensorManager.registerListener(this, countSensor, SensorManager.SENSOR_DELAY_UI);

        }else{
            Toast.makeText(this, "Jouw apparaat heeft geen sensor!", Toast.LENGTH_LONG) .show();
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if(activityRunning){
            count.setText(String.valueOf(event.values[0]));
        }else{
            event.values[0] = 0;
        }



    }



    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
        activityRunning = false;
    }



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

    }

    protected void onDestroy() {
        super.onDestroy();

    }
}

最佳答案

当您点击应用程序中的重置按钮时,将当前步数保存到 SharedPreferences。而且您需要一种方法来找出上次重启的时间,因为每次重启时保存的计数都会失效。

private Integer stepsInSensor;
private Integer stepsAtReset;

void onCreate() {
  SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
  stepsAtReset = prefs.getInt("stepsAtReset", 0);
}

public void onClick(View v) {
    stepsAtReset = stepsInSensor;
    if (stepsAtReset != null) {
        SharedPreferences.Editor editor =
            getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
        editor.putInt("stepsAtReset", stepsAtReset);
        editor.commit();
    }
    // you can now display 0:
    count.setText(String.valueOf(0));
}

@Override
public void onSensorChanged(SensorEvent event) {
    if(activityRunning){
        stepsInSensor = Integer.valueOf(event.values[0]);
        if (stepsAtReset = null) {
            stepsAtReset = stepsInSensor;
        }
        int stepsSinceReset = stepsInSensor - stepsAtReset;
        if (stepsSinceReset < 0) {
            stepsAtReset = stepsInSensor;
            stepsSinceReset = 0;
        }
        count.setText(String.valueOf(stepsSinceReset));
    }else{
        event.values[0] = 0;
    }
}

关于java - 我的计步器不会重置步数,​​即使在卸载后也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35244349/

相关文章:

java - 向 caroufredsel 幻灯片添加文本

java - 如何在 android 中隐藏翻译器 API key

android - 使用附加库 (Assimp) 在 Qt 上构建 android 应用程序

Android SearchView 自定义

安卓穿戴: DataItem API vs Channel API

java - Android 同步 onSensorChanged?

java - 将带有映射的对象列表转换为基元数组

c# - 无法在 JAVA 中验证签名,但在 .NET 中验证成功

android - 只有两侧的形状可绘制

android - 传感器_延迟_游戏 : how much is it?