想象一下,你正指着电视。你把手机握在手里。现在,转动你的手腕。
我需要设置哪种传感器来检测这种运动?
陀螺? 取向? 加速度计?
答案 0 :(得分:7)
传感器TYPE_MAGNETIC_FIELD
和TYPE_ACCELEROMETER
可以很好地检测到(因为TYPE_ORIENTATION
现已弃用)。
您将需要:
一些矩阵:
private float[] mValuesMagnet = new float[3];
private float[] mValuesAccel = new float[3];
private float[] mValuesOrientation = new float[3];
private float[] mRotationMatrix = new float[9];
用于捕获传感器发送的值的侦听器(这将是SensorManager.registerListener()
的参数,您必须调用它来设置传感器):
private final SensorEventListener mEventListener = new SensorEventListener() {
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
public void onSensorChanged(SensorEvent event) {
// Handle the events for which we registered
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mValuesAccel, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mValuesMagnet, 0, 3);
break;
}
};
你需要计算方位角,俯仰和滚动:
SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);
然后 mValuesOrientation
填充:
mValuesOrientation[0]
:方位角,围绕Z轴旋转。 mValuesOrientation[1]
:绕X轴旋转。 mValuesOrientation[2]
:滚动,围绕Y轴旋转。 检查documentation of getOrientation()以了解轴的定义方式。您可能需要使用SensorManager.remapCoordinateSystem()
重新定义这些轴。
答案 1 :(得分:0)
这取决于你想要检测的内容,如果你想检测手机是否已经旋转,那么加速度计可能是你最好的选择。 如果您想检测手机现在已旋转,请转到方向。
答案 2 :(得分:0)
gyroscope用于检测旋转,如果您不关心相对于地球的位置。