Я использую датчик вектора вращения следующим образом:
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 и другие приложения показывают низкую точность в этих ситуациях.
Что эти другие приложения используют, чтобы узнать фактическую точность ориентации компаса?