陀螺仪传感器叫做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中的传感器(总)