2016-09-04 148 views
0

我剛開始在Android和Java昨天,我有一個問題。我正試圖向一些TextView輸出一個傳感器的值。文本更新,但是在定義時設置了值。 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.註冊傳感器的實例到實施Lister類的情況下,您已經在MainActivity上實現了SensorEventListener,因此它將會

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

現在,當一定的變化會發生,它會調用該方法onSensorChanged,請讓我知道它的工作或沒有

+0

感謝您的快速回復!我從未在文檔中跨過註冊步驟。現在正在工作(ish)。我得到正確的值,但不會每x毫秒更新一次。不要認爲它與onSensorChanged函數有什麼關係,而是我正在使用的循環方法。 –

+0

檢查步驟3,第三個參數在這裏你可以改變頻率有一些默認頻率可用。我沒有得到最後一部分,但沒有使用任何循環,android傳感器事件遵循發佈者訂閱模式,您可能需要閱讀此內容。 –

+1

我的不好,我的意思是文本doensn't後第一次更新。通過在傳感器更新功能中簡單地移動setText()來修復它。謝謝一堆!這打開了很多。 –