Степень перемещения измерительного устройства с датчиками

#java #android #move #sensors

#java #Android #переместить #датчики

Вопрос:

Моя проблема заключается в 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 amp;amp; 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);
}
  

Комментарии:

1. Действительно, они будут. Реальный мир полон шума, как фактических вибраций, так и в самих датчиках. Несомненно, у этого вопроса есть существующие дубликаты, из которых вы можете извлечь уроки.

2. если вы можете помочь мне с некоторыми ссылками, я буду вам признателен