2

想象一下你正指着电视。你手里拿着手机。现在,转动你的手腕。

我需要使用哪个传感器来检测这种运动?

陀螺仪?方向?加速度计?

4

3 回答 3

7

传感器可以很好地检测到这一点(TYPE_MAGNETIC_FIELD现在已弃用)。TYPE_ACCELEROMETERTYPE_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 轴旋转。

检查getOrientation() 的文档以了解轴是如何定义的。您可能需要使用SensorManager.remapCoordinateSystem()重新定义这些轴。

于 2011-07-27T15:30:37.050 回答
0

这取决于您想要检测的内容,如果您想检测手机是否已旋转移动,那么加速度计可能是您最好的选择。如果您想检测手机现在是否已旋转,请使用 Orientation。

于 2011-07-27T15:18:24.480 回答
0

如果您不关心您相对于地球的位置,陀螺仪用于检测旋转

于 2018-11-29T21:05:11.383 回答