哪款传感器用于旋转android手机?

时间:2011-07-27 15:13:18

标签: android android-sensors

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

我需要设置哪种传感器来检测这种运动?

陀螺? 取向? 加速度计?

3 个答案:

答案 0 :(得分:7)

传感器TYPE_MAGNETIC_FIELDTYPE_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用于检测旋转,如果您不关心相对于地球的位置。