如何制作一个完美的延迟时间,所以它只计算一次

时间:2016-04-06 13:31:53

标签: java android accelerometer

你好我正在使用一个jumpApp来计算你跳跃的次数和使用accelorometer传感器。 我得到的问题是我不知道如何把延迟放在一起,所以它是完美的,有时跳跃计算为2次跳跃,有时候它没有注册,有时它运作良好。我想在每次计数跳跃时都有大约0.4秒。

private TextView textView;
private TextView text;
private SensorManager sensorManager;
double ax,ay,az;
boolean newJumpAccepted = true;
int numbersOfJumps = 0;
long startTime = 0;
int count;
MediaPlayer mediaPlayer;
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
    @Override
    public void run() {
        long millis = System.currentTimeMillis() - startTime;

        if(millis>400){
            newJumpAccepted = true;
        } else {
            newJumpAccepted = false;
        }


        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        seconds = seconds % 60;
        timerHandler.postDelayed(this,500);
    }
};


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
    text = (TextView) findViewById(R.id.text);
    textView = (TextView) findViewById(R.id.textView);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}

@Override
public void onSensorChanged(SensorEvent event){
    SharedPreferences preferences =      PreferenceManager.getDefaultSharedPreferences(this);
    String result = "";
    double d = Math.round(event.values[1]);
    float threshold = preferences.getFloat("hello", 11);
    if (d != 0 && d >= threshold && newJumpAccepted){
        count++;
    }
    Log.i("hej", String.valueOf(d));
    text.setText("Jump made" + " " + count + " " + d);
    text.invalidate();
    startTime();
}

private void startTime() {
    if(newJumpAccepted) {
        startTime = System.currentTimeMillis();
        timerHandler.postDelayed(timerRunnable, 0);
    }
    newJumpAccepted = false;
}
}

1 个答案:

答案 0 :(得分:0)

Timer timer;
MyTimerTask myTimerTask;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
    text = (TextView) findViewById(R.id.text);
    textView = (TextView) findViewById(R.id.textView);

    if(timer != null){
        timer.cancel();
    }

    timer = new Timer();
    myTimerTask = new MyTimerTask();

    timer.schedule(myTimerTask, 400, 400);
}

class MyTimerTask extends TimerTask {

    @Override
    public void run() {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {

                if (!newJumpAccepted) {
                    text.setText(String.valueOf(count));
                    newJumpAccepted = true;
                }
            }
        });
    }
}