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

ric*_*ard 2 android android-sensors

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

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

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

Shl*_*blu 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];
Run Code Online (Sandbox Code Playgroud)

一个监听器,用于捕获传感器发送的值(这将是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; 
    }
};
Run Code Online (Sandbox Code Playgroud)

你需要计算方位角,俯仰和滚动:

    SensorManager.getRotationMatrix(mRotationMatrix, null, mValuesAccel, mValuesMagnet);
    SensorManager.getOrientation(mRotationMatrix, mValuesOrientation);  
Run Code Online (Sandbox Code Playgroud)

mValuesOrientation 然后填写:

  • mValuesOrientation[0]:方位角,绕Z轴旋转.
  • mValuesOrientation[1]:俯仰,围绕X轴旋转.
  • mValuesOrientation[2]:滚动,绕Y轴旋转.

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