Android:getAngleChange-奇怪的结果

Android:getAngleChange-奇怪的结果,android,orientation,sensors,angle,Android,Orientation,Sensors,Angle,我目前正在试验一些安卓手机的传感器。为了测试,我使用了三星Galaxy S。因为它没有陀螺仪,所以我使用加速度计和磁场传感器 我基本上想做的是,当移动设备时,获得一定的角度。我试图解释:考虑你是在你面前的脸上拿着手机,然后你把自己转90度到右边。 我使用以下代码获取当前旋转矩阵: @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACC

我目前正在试验一些安卓手机的传感器。为了测试,我使用了三星Galaxy S。因为它没有陀螺仪,所以我使用加速度计和磁场传感器

我基本上想做的是,当移动设备时,获得一定的角度。我试图解释:考虑你是在你面前的脸上拿着手机,然后你把自己转90度到右边。 我使用以下代码获取当前旋转矩阵:

@Override
public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        mGravity = event.values.clone();
    }

    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
        mGeomagnetic = event.values.clone();
    }
    if (mGravity != null && mGeomagnetic != null) {
        float R[] = new float[9];
        float I[] = new float[9];
        boolean success = SensorManager.getRotationMatrix(R, I, mGravity,
                mGeomagnetic);
    }
}
这很有效,然后我使用
SensorManager.getAngleChange(angleChange,R,lastR)以实现角度更改。
然后,如果我按照上述方式转动自己,并且不倾斜手机或改变其他任何东西,我的角度变化[1]
将达到(大约)65°

但是,如果我在转动手机时将手机倾斜90°(使显示屏在转动后朝向天花板),则
角度变化[1]
会(大致)倾斜90°

我现在很困惑,为什么这样的旋转会影响
angleChange[1]
中的值,另一方面,为什么需要它来获得预期的90°

我想要实现的是,在如上所述移动手机时获得角度(不是以90度的步幅,而是这种方向变化),而不管其他方向发生了哪些变化(沿其他两个轴)


是否有这种可能性?

另一件事是,API版本9中提供了这种方法(SensorManager.getAngleChange()),为支持早期版本的设备获取角度的可能解决方案是什么。我不确定您的评论是否正确。如果由于较旧的API版本,getAngleChange不可用,您是否要求使用不同的解决方案来获取角度?Ya@fkerber。但我从API版本9的源代码中复制了一个方法并进行了处理。目前,我使用的是这里的公式:对不起,该页面是德语的,但我希望数学公式可以使用-英语版本显示不同的公式。另一件事是,此方法(SensorManager.getAngleChange())可从API版本9获得,对于早期版本支持的设备,有什么可能的解决方案可以获得angle。我不太确定我是否得到了你的正确评论。如果由于较旧的API版本,getAngleChange不可用,您是否要求使用不同的解决方案来获取角度?Ya@fkerber。但我从API版本9的源代码中复制了一个方法并进行了处理。目前,我使用的是这里的公式:对不起,这是德语版的,但我希望它对数学公式没问题-英文版显示了不同的公式。