Sensor.TYPE_ROTATION_VECTOR иногда дает неверный курс для Android - PullRequest
0 голосов
/ 07 ноября 2019

В моем приложении я хочу, чтобы курс устройства указывался в градусах, поэтому вначале я использовал Sensor.TYPE_MAGNETIC_FIELD и Sensor.TYPE_ACCELEROMETER, но иногда это не давало желаемого результата, т. Е. Произошло огромное изменение значения курса.

После этого я услышал о Sensor.TYPE_ROTATION_VECTOR, что он более стабилен и точен из-за его слитой версии датчиков, но иногда он также дает мне неправильные показания (иногда есть огромная разница в фактическом курсе).

Примечание. Я тестирую его в движущемся поезде.

Вот мой код:

float[] orient = new float[3];
float[] rotmat = new float[9];



    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    gsensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

    packageManager = getPackageManager();
    if (packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)){
        sensorManager.registerListener(this, gsensor, SensorManager.SENSOR_DELAY_NORMAL);

    }else {
        Toast.makeText(OutputScreen.this,"No Compass Sensor !", Toast.LENGTH_SHORT).show();
    }


@Override
public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR){

        SensorManager.getRotationMatrixFromVector(rotmat, event.values);
        SensorManager.getOrientation(rotmat, orient);

        azimuth = (float) Math.toDegrees(orient[0]);


        if (azimuth < 0){
            azimuth = azimuth + 360;
        }

       Log.i("OUTPUT",""+azimuth);  //heading in degree


    }




}

Я знаю, что в моем коде что-то не так, но не могу понять,Было бы здорово, если бы кто-нибудь помог мне с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...