Я делаю приложение для направления qibla, и мое направление для qible немного не соответствует цели. Мой код приведен ниже - PullRequest
1 голос
/ 29 мая 2020

Вот мой код, чтобы найти направление киблы по компасу. все работает нормально компас работает, даже север, восток, запад, юг показывает нормально, но направление киблы неточно. пожалуйста, если вы можете исправить, если что-то отсутствует или неправильно в моем коде.

**** 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) {

    }
} ********
...