获取phone角度(俯仰)

Get phone angle (pitch)

我真的希望有人能帮助我: 我正在开发一个 Android 应用程序,它显示 phone 的角度

我正在使用此代码:

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
}

我正在进一步处理我在这里得到的值,但这不是这里的问题。

当 phone 与 table 持平时,值如下所示:

roll -0,018

球场 0,024

偏航 2,51

这对我来说很好(如果我将值转换为欧拉角)

现在假设我从 table 中取出 phone - phone 的底部(微型 USB 端口所在的位置)保留在 table 上并且我用相机掀边

音高的值越来越负 - 直到音高达到 -1.53​​(欧拉中的 -90)一旦达到该值,值就会再次增加,如果 phone 是在 table 上,显示器面向 table,音调再次回到 0。 问题是,我必须区分这两个值(例如 -1 和 -1

我该怎么做?滚动不是问题,因为滚动最大 180 度,而不是这个 90 度问题..

真心希望你能帮帮我!

所以

if(mGravity[2]<0) orientation[1] = (float) (Math.PI + orientation[1]);

足以获得我需要的值 --- 但现在我有一个新问题 - 我想重新映射坐标系,所以当 phone 在 table 上,如果 phone 站在微型 USB 端口

上,则为 +90

我试过了

SensorManager.remapCoordinateSystem(Ra, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, Ri);

但是现在翻转和俯仰被交换了 --- 我需要做什么才能简单地获得正俯仰值,只要显示器朝上,如果显示器朝下,则获得负值?

重新映射是不是错误的想法,我可以通过做其他事情来简化它吗?