【问题标题】:Which sensor for rotating android phone?哪个传感器用于旋转安卓手机?
【发布时间】:2011-07-27 15:13:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-sensors


    【解决方案1】:

    传感器 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() 重新定义这些轴。

    【讨论】:

    • 当我这样做时,俯仰角永远不会达到 180°。它从 0°(平坦,面向天空)开始,然后当手机面向我时变为 90°,然后当手机面向地板时返回 90°。这是预期的行为吗?那我怎么知道设备是盯着天空还是地板呢?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 2022-10-09
        • 1970-01-01
        相关资源
        最近更新 更多