2013-05-30 2 views
0

im essayant de lire onsensorchanged toutes les x secondes, im en utilisant countdowntimer mais pas chaque seconde une seule fois lorsque la méthode est en cours d'exécution,méthode d'exécution toutes les x secondes dans accéléromètre

private CountDownTimer delay; 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     float[] values = event.values; 
     // Movement 
     x =(int) Math.floor(values[0]); 
     y =(int) Math.floor(values[1]); 
     z =(int) Math.floor(values[2]); 
     delay = new countleft(START_DELAY, INTERVAL); 
     delay.start(); 
    } 
} 


class countleft extends CountDownTimer{ 
    public countleft(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
     // TODO Auto-generated constructor stub 
    } 
    @Override 
    public void onFinish() { 
     if(x>=3){ 
      board.right(); 
     } 
     else if(x<=(-3)){ 
      board.left(); 
     } 
     else if(y>=3){ 
      board.up(); 
     } 
     else if(y<=(-3)){    
      board.down(); 
     } 
     START_DELAY = 2000; 
    } 

besoin de conseils

+1

ce que vous voulez atteindre? – Blackbelt

+0

Pour commencer, ** onSensorChanged() ** est appelé en continu pendant que l'entrée devient disponible, éventuellement à un débit élevé. Chaque appel lance un nouveau compte à rebours, de sorte que vous disposerez très rapidement de milliers de comptes à rebours en parallèle. Comme dit Blackbelt, il serait utile si nous savions exactement ce que vous essayiez d'atteindre. –

+0

im essayant d'exécuter la méthode 'board.up()' et d'autres à juste toutes les 1 secondes, – user2375628

Répondre

0

Je d suggérez que vous onSensorChanged(...) modifier

if (board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 

à

if (delay != null && board!=null && event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) 

afin qu'il n'y ait qu'un seul objet de délai à tout moment. Et puis, en classe countleft.onFinish(), au lieu de

START_DELAY = 2000; 

vous auriez besoin

delay = null; 

de telle sorte que l'objet suivant countleft peut être créé dans onSensorChanged(...)

+0

ne fonctionne pas ,, im set toast 'onTick()' pour voir ce qui se passe, mais rester coincé sur 2000,1980 et 2000 new board method() ne fonctionne pas – user2375628

+0

Je vous suggère d'utiliser beaucoup de 'Log.d (...)' pour savoir ce qui se passe. Assurez-vous d'inclure le statut de vos variables comme le délai, le tableau etc. dans la journalisation. – Stochastically

Questions connexes