使用传感器测量设备移动度

时间:2016-10-02 15:20:31

标签: java android move sensor

我的问题是onSensorChanged在没有任何设备移动的情况下进行更改。我读了一些关于重力的东西并消除了它,但是onSensorChanged在没有设备移动的情况下仍然会调用太多次。

感谢有人帮助我。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    tv1= (TextView) findViewById(R.id.textView);
    tv2= (TextView) findViewById(R.id.textView2);
    mSensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
    listOfSensors=new ArrayList<>();
}

@Override
protected void onResume() {
    super.onResume();

    mSensorManager.registerListener(this, mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);
    mSensorManager.registerListener(this, mMagnetometer,SensorManager.SENSOR_DELAY_NORMAL);   
}

protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(this);
}

public void onSensorChanged(SensorEvent event) {
  if (event.sensor == mAccelerometer) {
      mLastAccelerometer = event.values;
  } else if (event.sensor == mMagnetometer) {
        mLastMagnetometer = event.values;
    }
    if (mLastAccelerometer != null && mLastMagnetometer != null) {
       SensorManager.getRotationMatrix(r, i, mLastAccelerometer, mLastMagnetometer);
      SensorManager.getOrientation(r,mOrientation);
        gravity = (float) (alpha*azimut+(1-alpha)*Math.toDegrees(mOrientation[0]));
        azimut=event.values[0]-gravity;
        firstDegree=(azimut+360)%360;
        secondGravity= (float) (alpha*newDegree+(1-alpha)* Math.toDegrees(mOrientation[0]));
        secondDegree=event.values[0]-secondGravity;
        currentDegree=(secondDegree+360)%360;
        lastDegree  =lastDegree+(currentDegree-firstDegree);
    }
    if(lastDegree != -123456){
        if(lastDegree > 360){
            numberOfRounding++;
       }
   }

    lastDegree = secondDegree;

    if (event.sensor==mGravity){
        listOfSensors=mSensorManager.getSensorList(Sensor.TYPE_ALL);
    }
    tv1.setText("Degree: "+firstDegree);
    tv2.setText("Result: "+numberOfRounding);
}

0 个答案:

没有答案