Я пытаюсь получить азимут, в градусах (т.е. 0-360), используя следующий метод:Android азимут
float[] mGravity;
float[] mGeomagnetic;
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = event.values;
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = event.values;
if (mGravity != null && mGeomagnetic != null) {
float R[] = new float[9];
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
mGeomagnetic);
if (success) {
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);
float azimut = orientation[0];
bearing.setText("Bearing: "+ azimut);
}
}
}
Значение азимута (т.е. orientation[0]
) должен быть 0 < = азимут < 360, но Когда я вращаю свое устройство, я получаю только значения от -3 до 3. Может кто-нибудь, пожалуйста, скажите мне, что может быть проблемой?
Большое спасибо @Hoan Нгуен – user1135357
ориентация [0] только кажется, дает diff с момента последнего чтения. Я преобразовал свое значение в градусы, но значения все еще очень малы. Есть ли способ получить фактический подшипник устройства (0 - 360 градусов) в одном чтении? –
Это не diff, это фактический подшипник относительно магнитного севера. Что-то не так с вашим кодом, если ваше чтение всегда является небольшим значением. –