2017-08-09 9 views
0

私はAndroidでアクセラレータを使用しようとしていますが、結果を得るのに問題があります。加速度計がnullを返すようになる

加速度計はnullを返すことがあります。イベントリスナーが問題なのかどうかはわかりません。

public class CalibrateScreen extends AppCompatActivity implements SensorEventListener{ 

    private SensorManager sensorMan; 

    private float mAccel; 
    private float mAccelCurrent; 
    private float mAccelLast; 
    boolean Calibration; 

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

     sensorMan = (SensorManager)getSystemService(SENSOR_SERVICE); 
     Sensor accelerometer = sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     sensorMan.registerListener(CalibrateScreen.this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); 
     mAccel = 0.00f; 
     mAccelCurrent = SensorManager.GRAVITY_EARTH; 
     mAccelLast = SensorManager.GRAVITY_EARTH; 
     Calibration = true; 

    @Override 
    public void onSensorChanged(SensorEvent sensorEvent) { 
     if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER){ 
      // Shake detection 
      float x = sensorEvent.values[0]; 
      float y = sensorEvent.values[1]; 
      float z = sensorEvent.values[2]; 
      mAccelLast = mAccelCurrent; 
      mAccelCurrent = (float) Math.sqrt(x*x + y*y + z*z); 
      float delta = mAccelCurrent - mAccelLast; 
      mAccel = mAccel * 0.9f + delta; 
      //mAccel is the current acceleration. 
      if (Calibration) { 
       addMember(mAccel); 
      } 
     } 
    } 

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

    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     sensorMan.registerListener(this, sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
     sensorMan.registerListener(this, sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
    } 

    @Override 
    protected void onStop() { 
     sensorMan.unregisterListener(this); 
     super.onStop(); 
    } 

} 

完全なコードペーストビンはここにある:https://pastebin.com/uREm9Esd

は、問題が最初にある

+0

「加速度計がnullを返す」と言ったときの意味を説明してください。この行からnullが返されることを意味しますか? 'sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);'? – CzarMatt

+0

加速度計データ配列sensorEventは、常にnullで終了するようです –

答えて

0
mAccelLast = mAccelCurrent; 
mAccelCurrent = (float) Math.sqrt(x*x + y*y + z*z); 
float delta = mAccelCurrent - mAccelLast; 

事前にお時間をいただき、ありがとうございます、私が問題に関連していると信じて何

デルタ計算の前に行う必要があります。 このようなバグでは、値が0になったヌルではありません!

FYI:と私は時々加速度計でそれが本当にnullを返すことができますが、このような状況ジェットを見ていないが聞こえる。

関連する問題