Как использовать датчик акселерометра для определения движения устройства? - PullRequest
0 голосов
/ 29 мая 2020

Я работаю над проектом android, в котором мне нужно определять точное направление, когда пользователь поворачивает (т.е. влево / вправо / внизу / вверх). Я использую датчик акселерометра для получения координат, но я не знаю, как обнаружить движение.

, поэтому мой вопрос:

Как узнать, что пользователь перемещает устройство в нижнем / верхнем направлении? и как это сделать что-то в соответствии с движением?

Это мой фрагмент кода:

   @Override
public void onSensorChanged(SensorEvent event) {
    float[] values = event.values;

    long currentTime = System.currentTimeMillis();
    if ((currentTime - lastUpdate) > 1000) {
        lastUpdate = currentTime;

        int sensorType = event.sensor.getType();
        switch (sensorType) {
            case Sensor.TYPE_ACCELEROMETER:
                mAccelerometerData = event.values.clone();
                break;
            case Sensor.TYPE_MAGNETIC_FIELD:
                mMagnetometerData = event.values.clone();
                break;
            default:
                return;
        }


        float[] rotationMatrix = new float[9];
        boolean rotationOk =
                SensorManager.getRotationMatrix(rotationMatrix, null, mAccelerometerData, mMagnetometerData);
        float[] rotationMatrixAdjust = new float[9];
        switch (display.getRotation()) {
            case ROTATION_0:
                rotationMatrixAdjust = rotationMatrix.clone();
                break;
            case ROTATION_90:
                SensorManager.remapCoordinateSystem(rotationMatrix,
                        SensorManager.AXIS_Y,
                        SensorManager.AXIS_MINUS_X,
                        rotationMatrixAdjust);
                break;
            case ROTATION_180:
                SensorManager.remapCoordinateSystem(rotationMatrix,
                        SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y,
                        rotationMatrixAdjust);
                break;
            case ROTATION_270:
                SensorManager.remapCoordinateSystem(rotationMatrix,
                        SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X,
                        rotationMatrixAdjust);
                break;


        }

        float[] orientationValues = new float[3];

        if (rotationOk) {
            SensorManager.getOrientation(rotationMatrixAdjust,
                    orientationValues);
        }

        float azimuth = orientationValues[0];
        float pitch = orientationValues[1];
        float roll = orientationValues[2]


}

Заранее спасибо.

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