1

我有以下的類來accelerometer讀取數據:的Android加速度計數據類

public class Accelerometer implements SensorEventListener { 

    private SensorManager mSensorManager; 
    private Sensor mAccelerometer; 

    float deltaX; 
    float deltaY; 
    float deltaZ; 

    Activity activity; 

    public Accelerometer(Activity act) 
    { 
     this.activity = act; 
     mSensorManager = (SensorManager) this.activity.getSystemService(Context.SENSOR_SERVICE); 
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
    } 


    public float getDeltaX() 
    { 
     return this.deltaX; 
    } 

    public float getDeltaY() 
    { 
     return this.deltaY; 
    } 

    public float getDeltaZ() 
    { 
     return this.deltaZ; 
    } 


    @Override 
    public void onSensorChanged(SensorEvent event) { 
     // TODO Auto-generated method stub 

     deltaX = event.values[0]; 
     deltaY = event.values[1]; 
     deltaZ = event.values[2]; 
    } 
} 

,我從我的主activity類使用下面的代碼訪問這個類:

Accelerometer sbt = new Accelerometer (this); 
tvX.setText(Float.toString(sbt.getDeltaX()) + " " +Float.toString(sbt.getDeltaY()) + " "+Float.toString(sbt.getDeltaZ())); 

然而,它總是告訴我0,0,0.不知道當前代碼有什麼問題。任何幫助將不勝感激。

+0

你試過在設備或模擬器上嗎?... – 2013-02-27 05:37:25

+0

在移動設備上 – MKS 2013-02-27 05:38:24

回答

2

加速度計(和所有傳感器數據)在回調系統上工作。在下一次讀取傳感器之前,它不會打電話給您,它將繼續調用您的onSensorChanged,直到您取消註冊。但是,如果您在註冊後立即嘗試設置文本,您將不會被調用。當您更新新值時,您需要在onSensorChanged中設置textView。