由于我没有在网上找到任何相关答案,因此我发布了一个关于使用加速度计检测 android 设备绕其轴旋转 360 度的问题。例如在横向模式下围绕 y 轴:假设在起始位置 y 值为 0(设备与地面平齐)。当手机向前旋转 90 度y = -10
时,会产生 180 度向前倾斜y = 0
、270 度向内倾斜y = +10
和 360 度向内倾斜y = 0
。那么代码如何仅在预先指定的方向上检测设备的完整转动呢?
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
// assign directions
x = event.values[1];
y = event.values[0];
z = event.values[2];
???
}
}
编辑: 已通过使用 getRotationMatrix() 方法成功。
private float[] r = new float[9];
private float[] i = new float[9];
private float[] v = new float[3];
private float[] accValues = new float[3];
private float[] geoValues = new float[3];
private int azimuth, pitch, roll;
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accValues = event.values.clone();
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
geoValues = event.values.clone();
}
boolean success = SensorManager.getRotationMatrix(r, i, accValues,
geoValues);
if (success) {
SensorManager.getOrientation(r, v);
azimuth = v[0] * (180 / Math.PI);
pitch = v[1] * (180 / Math.PI);
roll = v[2] * (180 / Math.PI);
}
}