Датчик вектора вращения постоянно сообщает о высокой точности, даже если явно - PullRequest
0 голосов
/ 28 ноября 2018

Я использую датчик вектора вращения следующим образом:

val sensor = sensorManager.getDefaultSensor(TYPE_ROTATION_VECTOR)

Я регистрирую SensorEventListener на нем:

private class OrientationListener : SensorEventListener {
    private val rotationMatrix = FloatArray(9)

    override fun onSensorChanged(event: SensorEvent) {
        if (event.sensor.type != TYPE_ROTATION_VECTOR) return
        SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values)
        val easting = rotationMatrix[0]
        val northing = rotationMatrix[3]
        val azimuth = -atan2(northing, easting)
        val azimuthAccuracy = event.accuracy
            debug { "Azimuth changed to ${azimuth}, accuracy ${azimuthAccuracy}" }
        }
    }

    override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
        if (sensor.type == TYPE_ROTATION_VECTOR) {
            info { "Azimuth accuracy changed to $accuracy" }
        }
    }
}

Я никогда не наблюдал, чтобы этот код сообщал ничего, кромеSENSOR_STATUS_ACCURACY_HIGH даже в те моменты, когда это явно было не так (например, внутри машины).Тем не менее, Google Maps и другие приложения показывают низкую точность в этих ситуациях.

Что эти другие приложения используют, чтобы узнать фактическую точность ориентации компаса?

...