2016-09-04 6 views
0

Я только что начал на Android и Java вчера, и у меня проблема. Я пытаюсь вывести значения датчика в некоторые текстовые элементы. Текст обновляется, но со значениями, установленными в определении. onSensorChanged должен правильно обновить эти значения?Изменение датчика не срабатывает onSensorChanged

import [...] 

public class MainActivity extends Activity implements SensorEventListener { 

    public float[] gravity = {0,0,0}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final TextView gravxTxtView = (TextView) findViewById(R.id.gravxTxtView); 
     final TextView gravyTxtView = (TextView) findViewById(R.id.gravyTxtView); 
     final TextView gravzTxtview = (TextView) findViewById(R.id.gravzTxtView); 

     final Handler handler = new Handler(); 
     handler.postDelayed(
       new Runnable() { 
      @Override 
      public void run() { 
       gravxTxtView.setText("Gravity x: " + Float.toString((gravity[0]))); 
       gravyTxtView.setText("Gravity y: " + Float.toString((gravity[1]))); 
       gravzTxtview.setText("Gravity z: " + Float.toString((gravity[2]))); 
      } 
     }, 500); 
    } 

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

    @Override 
    public void onSensorChanged(SensorEvent event) { 
     if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
      gravity[0] = event.values[0]; 
      gravity[1] = event.values[1]; 
      gravity[2] = event.values[2]; 
     } 
    } 
} 

ответ

1

Есть некоторые серьезные шаги, которые отсутствуют 1. Получить экземпляр менеджера сенсора

SensorManager sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE); 

2. Получить экземпляр датчика

Sensor accel=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 

3. Регистрация датчика к классу листеров, который реализует SensorEventListener в вашем случае, который вы внедрили в MainActivity, так что это будет это

sensorManager.registerListener(this, accel, SensorManager.SENSOR_DELAY_NORMAL); 

теперь, когда определенное изменение произойдет это будет вызывать onSensorChanged метод, пожалуйста, дайте мне знать свою работу или не

+0

Спасибо за быстрый ответ! Я никогда не переходила на регистрационный шаг в документах. Сейчас он работает (ish). Я получаю правильные значения, но они не обновляются каждые x миллисекунд. Не думайте, что это имеет какое-либо отношение к функции onSensorChanged, а скорее к методу цикла, который я использую. –

+0

проверьте шаг 3, третий параметр здесь вы можете изменить частоту, когда имеется некоторая частота по умолчанию. Я не получил последнюю часть, но не использовал какой-либо цикл, событие датчика Android следует шаблону подписчика издателя, вы можете прочитать об этом. –

+1

Мой плохой, я имею в виду, что текст не обновляется после первого раза. Исправлено, просто перемещая setText() в функции обновления датчика. Огромное спасибо! Это открывает много. –