2014-09-24 3 views
0

나는 가속도계에서 반환 된 좌표를 가져 와서 버튼 클릭만으로 TextViews에 인쇄하는 코드를 작성했습니다. 그러나 모든 라벨의 값으로 0.0을 얻습니다. 또한 모바일이 다소 흔들릴 때마다 값이 변경되는지 확인하기 위해 onSensorChange() 메서드에 setText 부분을 추가했습니다. 매니페스트에도 필요한 권한을 추가했습니다. 이 일을하도록 도와주세요.Android 가속도계에서 0.0을 반환합니다.

코드 :

package com.example.lol; 

import android.app.Activity; 
import android.content.Context; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity implements SensorEventListener{ 

    private SensorManager senSensorManager; 
    private Sensor senAccelerometer; 
    private long lastUpdate = 0; 
    private float last_x, last_y, last_z; 
    public float dummy_x, dummy_y,dummy_z; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(onClickListener); 

     senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     senSensorManager.registerListener(this, senAccelerometer , SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    protected void onPause() { 
     super.onPause(); 
     senSensorManager.unregisterListener(this); 
    } 
    protected void onResume() { 
     super.onResume(); 
     senSensorManager.registerListener(this, senAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    public void onSensorChange(SensorEvent sensorEvent) { 
     Sensor mySensor = sensorEvent.sensor; 

     if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      float x = sensorEvent.values[0]; 
      float y = sensorEvent.values[1]; 
      float z = sensorEvent.values[2]; 
      dummy_x=x; 
      dummy_y=y; 
      dummy_z=z; 
      TextView textView1 = (TextView)findViewById(R.id.textView1); 
      TextView textView2 = (TextView)findViewById(R.id.textView2); 
      TextView textView3 = (TextView)findViewById(R.id.textView3); 
      textView1.setText(Float.toString(x)); 
      textView2.setText(Float.toString(y)); 
      textView3.setText(Float.toString(z)); 
     } 
    } 

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

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private OnClickListener onClickListener = new OnClickListener() { 
     @Override 
     public void onClick(final View v) { 
      switch(v.getId()){ 
       case R.id.button1: 
        TextView textView1 = (TextView)findViewById(R.id.textView1); 
        TextView textView2 = (TextView)findViewById(R.id.textView2); 
        TextView textView3 = (TextView)findViewById(R.id.textView3); 
        textView1.setText(Float.toString(dummy_x)); 
        textView2.setText(Float.toString(dummy_y)); 
        textView3.setText(Float.toString(dummy_z)); 
       break; 
      } 
     } 
    }; 

    @Override 
    public void onSensorChanged(SensorEvent event) { 

    } 

} 

답변

1

당신은 2 개 OnSensorChange 기능을 가지고있다. 모든 TextView 코드가있는 첫 번째 것은 아무 것도 무시하지 않습니다. 아래쪽에있는 값 (비어 있음)은 값이 올 것입니다.

관련 문제