2016-04-06 1 views
1

Hallo ich arbeite mit einer jumpingApp, die zählen wird, wie oft Sie springen und im Einsatz von Accelometer-Sensor. Das Problem, das ich habe, ist, dass ich nicht wirklich weiß, wie man die Verzögerung setzt, damit es perfekt ist, manchmal zählt ein Sprung als 2 Sprung, manchmal registriert es nicht, und manchmal funktioniert es gut. Ich hätte gerne bei jedem Zählimpuls etwa 0,4 Sekunden.Wie man eine perfekte Verzögerung macht, so dass es nur einmal zählt

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; 
} 
} 

Antwort

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; 
       } 
      } 
     }); 
    } 
} 
Verwandte Themen