2016-09-04 2 views
0

저는 어제 안드로이드와 자바에서 시작했는데 문제가 있습니다. 일부 TextViews 센서의 값을 출력하려면 노력하고있어. 텍스트는 업데이트되지만 정의 된 값으로 설정됩니다. 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

감사를 알려 주시기 바랍니다! 나는 문서에서 regisering 단계를 넘어선 적이 없다. 지금 일하고있어. 올바른 값을 얻지 만 x 밀리 초마다 업데이트하지 않습니다. onSensorChanged 함수와 관련이 있다고 생각하지 말고 내가 사용하고있는 루프 메서드를 사용하십시오. –

+0

3 단계를 확인하십시오. 여기에서 세 번째 매개 변수는 기본 주파수를 사용할 수있는 주파수를 변경할 수 있습니다. 나는 마지막 부분을 얻지 못했지만 루프를 사용하지 않고, 안드로이드 센서 이벤트는 게시자 구독자 패턴을 따른다. –

+1

나의 나쁜, 내가 의미하는 것은 텍스트 doensn't 첫 번째 시간 후에 업데이 트됩니다. 센서 업데이트 기능에서 setText()를 단순히 이동하여 문제를 해결했습니다. 무리 감사! 이것은 많은 것을 열어줍니다. –

관련 문제