我试图使用来自SensorEvent.values的Z轴数据,但它没有检测到我的手机在XY平面上的旋转,即.围绕Z轴.
我用这个作为坐标轴的参考.这是对的吗?

如何使用加速度计值测量该运动?
这些游戏类似:Extreme Skater,Doodle Jump.
PS:我的手机定位将是风景.
我正在使用Android重力和磁场传感器通过SensorManager.getRotationMatrix和SensorManager.getOrientation计算方向.这给了我方位角,俯仰和方向数.当设备平放在桌子上时,结果看起来很合理.
但是,我在清单中禁用了纵向和横向之间的切换,因此getWindowManager().getDefaultDisplay().getRotation()始终为零.当我将设备旋转90度以使其垂直竖立时,我遇到了麻烦.有时这些数字似乎非常错误,我意识到这与万向节锁相关.但是,其他应用程序似乎没有这个问题.例如,我将我的应用与两个免费传感器测试应用程序(传感器测试仪(Dicotomica)和传感器监测(R软件))进行了比较.当设备平坦时,我的应用程序同意这些应用程序,但当我将设备旋转到垂直位置时,可能会有很大差异.这两个应用程序似乎彼此一致,那么他们如何解决这个问题呢?
使用TYPE_MAGNETOMETER传感器时,可获得与器件方向相关的磁场强度的X,Y,Z值.我想要得到的是将这些值转换为全局参考框架,澄清:用户接受设备,测量这些值,而不是将设备旋转任何轴周围一定程度并获得相同的值.请在下面找到类似的问题: 在全局坐标中获取磁场值 如何获得磁场矢量,与设备旋转无关? 在这个答案中描述了样本解决方案(它用于线性加速,但我认为没关系):https://stackoverflow.com/a/11614404/2152255 我使用它并且我得到3个值,X总是非常小(不要认为它是正确的),Y和Z都可以,但是当我旋转设备时它们仍然有点变化.怎么可以调整?它可以全部解决吗?我使用简单的卡尔曼滤波器来近似测量值,因为即使设备根本没有移动/旋转,我也会得到不同的值.请在下面找到我的代码:
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.opengl.Matrix;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.test.statistics.filter.kalman.KalmanState;
import com.example.R;
/**
* Activity for gathering magnetic field statistics.
*/
public class MagneticFieldStatisticsGatheringActivity extends Activity implements SensorEventListener {
public static final int KALMAN_STATE_MAX_SIZE = 80;
public static final double MEASUREMENT_NOISE = 5;
/** Sensor manager. */
private SensorManager mSensorManager;
/** Magnetometer spec. */
private TextView vendor;
private TextView resolution; …Run Code Online (Sandbox Code Playgroud)