用户采取的总步骤 - Android应用程序步进计

时间:2017-01-13 14:02:09

标签: android pedometer

我有一个具有游戏步进计的应用程序,因此在玩游戏时计算用户在后台的步骤。它工作正常,我的问题是以下

  • 自开始玩游戏以来,用户采取了大量的步骤

例如,在一次会议中,他有200步,接下来是300步。 我想保存这500个步骤,以便我可以向用户显示成就,例如。恭喜你从比赛开始就走了1000步。

这是我在网上找到并且目前在我的应用程序中使用的步进计代码。

import android.app.Activity;
import android.content.Context;
import android.hardware.*;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class StepCounterActivity extends Activity implements SensorEventListener {

    private SensorManager sensorManager;
    private TextView count;
    boolean activityRunning;
    int totalSteps;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_step_counter);
        count = (TextView) findViewById(R.id.count);

        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

    @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, "Count sensor not available!", Toast.LENGTH_LONG).show();
        }    
    }

    @Override
    protected void onPause() {
        super.onPause();
        activityRunning = false;
        // if you unregister the last listener, the hardware will stop detecting step events
//        sensorManager.unregisterListener(this);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (activityRunning) {
            count.setText(String.valueOf(event.values[0]));
            //maybe add to a variable the number of steps somehow?
        }    
    }

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

1 个答案:

答案 0 :(得分:1)

由于您未使用下面的Service,因此可以正常使用。维护一个全局变量totalSteps来计算用户在所有会话中所采取的步骤总数。

private int totalSteps = 0;
@Override
public void onSensorChanged(SensorEvent event) {

    totalSteps += (int)event.values[0];

    if (activityRunning) {
        count.setText(String.valueOf(totalSteps));
    }

}

请记住,一旦应用被杀或关闭,totalSteps就会丢失。要克服这种情况,您应该尝试使用SharedPreferences