Android中的传感器之---陀螺仪传感器

陀螺仪传感器叫做Gyro-sensor,陀螺仪测量围绕设备的x,y和z轴的rad / s旋转速率,返回x、y、z三轴的角速度数据。

角速度的单位是radians/second。

传感器的坐标系 与用于加速度传感器的坐标系相同。逆时针旋转为正。也就是说,如果观察者从x,y或z轴上某个正位置看向位于原点上的设备,则该观察者将报告正旋转,如果该设备看起来是逆时针旋转的话。这是正向旋转的标准数学定义,与方向传感器使用的侧倾定义不同。

通常,陀螺仪的输出会随时间积分,以计算描述角度随时间步长变化的旋转。标准陀螺仪可提供原始旋转数据,而无需对噪声和漂移(偏差)进行任何滤波或校正。在实践中,陀螺仪的噪声和漂移会引入需要补偿的误差。通常,您可以通过监视其他传感器(例如重力传感器或加速度计)来确定漂移(偏差)和噪声。


public class MagneticFieldActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor sensor;
    private TextView mMagneticField;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_magnetic_field);
        mMagneticField=findViewById(R.id.tv_magnetic_field);
        sensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor=sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE );
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (sensorManager!=null){
            sensorManager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_UI);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this,sensor);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // 传感器返回的数据
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];
        StringBuffer buffer = new StringBuffer();
        buffer.append("X:").append(String.format("%.2f", x)).append("\n");
        buffer.append("Y:").append(String.format("%.2f", y)).append("\n");
        buffer.append("Z:").append(String.format("%.2f", z)).append("\n");
        mMagneticField.setText(buffer);
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

更多手机传感器使用请看Android中的传感器(总)

猜你喜欢

转载自blog.csdn.net/lanrenxiaowen/article/details/108236348