Используя getRotationMatrix и getOrientation в Android 2.1

У меня были проблемы с этим для слишком долго. Этот код должен произвести дуплекс, dy, дюжину для акселерометра и рабочее общее количество дуплекса. Это должно также произвести азимут, подачу и список.

Я использовал информацию, данную здесь, но напрасно.

Этот код правильно не производит подачу, азимут или список. Это производит 0.0,-0.0,-0.0 для последних трех textviews, соответственно.

switch (event.sensor.getType()) {
    case Sensor.TYPE_ACCELEROMETER:
        accelerometerValues = event.values.clone();
    case Sensor.TYPE_MAGNETIC_FIELD:
        geomagneticMatrix = event.values.clone();
        sensorReady = true;
        break;
    default:
        break;
}   

if (geomagneticMatrix != null && accelerometerValues != null && sensorReady) {
    sensorReady = false;

    float[] R = new float[16];
    float[] I = new float[16];

    SensorManager.getRotationMatrix(R, I, accelerometerValues, geomagneticMatrix);

    float[] actual_orientation = new float[3];
    SensorManager.getOrientation(R, actual_orientation);

    tvXCoordinate.setText(accelerometerValues[0] + "");
    tvYCoordinate.setText(accelerometerValues[1] + "");
    tvZCoordinate.setText(accelerometerValues[2] + "");

    floatXTotal += accelerometerValues[0];
    tvXTotal.setText(floatXTotal + "");

    tvAzimuth.setText(actual_orientation[0] + "");
    tvPitch.setText(actual_orientation[1] + "");
    tvRoll.setText(actual_orientation[2] + "");
}

8
задан Community 23 May 2017 в 12:01
поделиться

1 ответ

Возможно, мне что-то не хватает (и вы, возможно, уже решили эту проблему), но мне кажется, что ваш оператор switch неверен:

switch (event.sensor.getType()) {
        case Sensor.TYPE_ACCELEROMETER:
            accelerometerValues = event.values.clone();
        case Sensor.TYPE_MAGNETIC_FIELD:
            geomagneticMatrix = event.values.clone();
            sensorReady = true;
            break;
        default:
            break;
    }

Если событие вашего датчика - TYPE_ACCELEROMETER значения из события будут клонированы как в акселерометрValues ​​, так и в geom MagneticMatrix и sensorReady будут установлены в значение true. Я думаю, вам может потребоваться изменить порядок этого блока или, возможно, добавить разрыв ; после вашего первого случая.

6
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: