我的问题是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);
}