Я пытаюсь получить значение для заголовка пользователя на телефоне Android, используя только датчики акселерометра и магнитометра. Я просматривал множество других решений, но при попытке реализовать свой собственный код возникают некоторые проблемы.Получение заголовка пользователя с использованием акселерометра и магнитометра
Вот код:
if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
Log.d("MAG_FIELD", "ITS A MAG FIELD");
//aX, aY, aZ are raw accelerometer values
float aTheta = (float) Math.atan2(-aX, aZ);
float aPhi = (float) Math.atan2(-aY, aZ);
//Obtaining the current magnetometer readings
float mDegX = event.values[0];
float mDegY = event.values[1];
float mDegZ = event.values[2];
float rotationVectorX = (float) ((mDegX * Math.cos(aPhi)) + (mDegY *Math.sin(aTheta) * Math.sin(aPhi)) - (mDegZ * Math.cos(aTheta) * Math.sin(aPhi)));
float rotationVectorY = (float) ((mDegY * Math.cos(aTheta)) + (mDegZ * Math.sin(aTheta)));
//HEADING calculation
float heading = (float) Math.abs(Math.toDegrees(Math.atan(rotationVectorY /rotationVectorX)));
if(rotationVectorX >= 0.0f && rotationVectorY >=0.0f) {}
else if(rotationVectorX < 0.0f && rotationVectorY >= 0.0f) {heading = 180 - heading ;}
else if(rotationVectorX < 0.0f && rotationVectorY < 0.0f) {heading = 180 + heading;}
else if(rotationVectorX >= 0.0f && rotationVectorY < 0.0f){heading = 360 - heading;}
Мои проблемы являются:
- Заголовок постоянно от около 90 градусов, когда устройство плоская
- изменения заголовков, когда экран изменяется от плоской поверхности - мне нужно, чтобы это было то же самое