Вот мой код, чтобы найти направление киблы по компасу. все работает нормально компас работает, даже север, восток, запад, юг показывает нормально, но направление киблы неточно. пожалуйста, если вы можете исправить, если что-то отсутствует или неправильно в моем коде.
**** package com.example.compassone;
import androidx.appcompat.app.AppCompatActivity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements SensorEventListener {
ImageView kaba;
private static SensorManager sensorservices;
private Sensor sensor;
private float CurrentDegree = 0f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
kaba = findViewById (R.id.kaba);
sensorservices = (SensorManager) getSystemService (SENSOR_SERVICE);
sensor = sensorservices.getDefaultSensor (Sensor.TYPE_ORIENTATION);
}
@Override
protected void onResume(){
super.onResume ();
if (sensor != null){
sensorservices.registerListener (this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}
else{
Toast.makeText (this, "Not Supported", Toast.LENGTH_LONG).show();
}
}
@Override
protected void onPause(){
super.onPause ();
sensorservices.unregisterListener (this);
}
@Override
public void onSensorChanged(SensorEvent event) {
int degree = Math.round(event.values[0]);
RotateAnimation ra = new RotateAnimation (CurrentDegree, -degree, Animation.RELATIVE_TO_SELF,
0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
ra.setDuration (1000);
ra.setFillAfter (true);
kaba.startAnimation(ra);
CurrentDegree = -degree;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
} ********