#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. если вы можете помочь мне с некоторыми ссылками, я буду вам признателен