J'espère vraiment que quelqu'un est capable de me aider: Je travaille sur une application Android qui affiche l'angle du téléphone est tenuObtenez angle de téléphone (pas)
J'utilise ce code:
protected void onCreate(Bundle savedInstanceState)
{
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer,100000);
mSensorManager.registerListener(this, mMagnetometer, 100000);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
mGravity = lowPass(event.values.clone(), mGravity);
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
mGeomagnetic = lowPass(event.values.clone(), mGeomagnetic);
if (mGravity != null && mGeomagnetic != null) {
boolean success = SensorManager.getRotationMatrix(Ra, Ia, mGravity, mGeomagnetic);
if (success) {
SensorManager.getOrientation(Ra, orientation);
float tempxGy = (orientation[0]);// az
float tempyGy = (orientation[1]);// pitch
float tempzGy = (orientation[2]); //roll
}
Im traitant plus loin les valeurs que j'obtiens ici mais ce n'est pas le problème ici.
Lorsque le téléphone est à plat sur la table les valeurs qui ressemblent à:
rouleau -0018
pas 0024
lacet 2,51
qui ressemble bien à moi (aussi si je convertis les valeurs en angles euler)
maintenant imaginez que je prends le téléphone de la table - le bas du téléphone (où le port micro USB est) reste sur la table et je lève le côté avec la caméra
les valeurs du pitch deviennent de plus en plus négatives - jusqu'à ce que le pitch atteigne -1.53 (-90 en euler) dès que cette valeur est atteinte les valeurs augmentent encore et si le téléphone est sur la table avec l'affichage face à la table, la hauteur est de nouveau à 0. Le problème est, que je dois différencier entre les deux valeurs (par exemple -1 et -1
Comment puis-je faire cela? Le rouleau n'est pas un problème que le rouleau a un maximum de 180 degrés et non ce 90 degrés ! .. problème
J'espère vraiment que vous pouvez me aider
J'ai cherché et recherché des heures pour une solution concernant ce sujet et maintenant une solution apparaît simplement dans l'onglet relatif ... https://stackoverflow.com/questions/17747823/android-sensormanager-getorientation-returns-pitch -between-pi-2-and-pi-2 – user9821