sto cercando di ottenere il rilevamento della bussola in gradi (cioè 0-360) utilizzando il seguente metodo:Android bussola di rilevamento
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);
}
}
}
Il valore azimut (ovvero orientation[0]
) dovrebbe essere 0 < = azimut < 360 ma Ricevo solo valori da -3 a 3 mentre ruoto il mio dispositivo. Qualcuno può dirmi quale potrebbe essere il problema, per favore?
ringrazio molto @Hoan Nguyen – user1135357
l'orientamento [0] sembra solo fornire una differenza dall'ultima lettura. Ho convertito il mio valore in gradi ma i valori sono ancora molto piccoli. C'è un modo per ottenere il rilevamento effettivo del dispositivo (0 - 360 gradi) in una singola lettura? –
Non è un diff, è il rilevamento effettivo rispetto al nord magnetico. C'è qualcosa di sbagliato nel tuo codice se la tua lettura è sempre un piccolo valore. –