13.1.2. 获取指南针的更新

优质
小牛编辑
131浏览
2023-12-01

13.1.2.获取指南针的更新

表示传感器服务(Sensor Service)的类是SensorManager,接下来就是跟它打交道了。在Activity中实现一个SensorEventListener,将它注册到SensorManager中即可订阅特定传感器的更新。为了省电,我们将传感器操作安排在onResume()与onPause()之间。然后实现侦听器(Listener),在Activity中提供onAccuracyChanged()和onSensorChanged()两个方法。前者必须,后者可选。不过我们对传感器的精度(Accuracy)并无兴趣——因为方向传感器(Orientation Sensor)的精度在中间并不会发生变化,我们真正感兴趣的是它的数据。所以在这里我们将前者留空,而提供后者的实现。

在方向传感器状态变化时,传感器服务会回调onSensorChanged(),通知侦听器(Listener)得到了新数据。这些数据都是0~359之间的浮点数组成的数组。方位角(azimuth)与磁偏角(pitch与roll),构成了下边的坐标,如 //图13.1 "坐标轴"/:

(译者注: 磁偏角:磁针指示的方向并不是正南正北,而是微偏西北和东南,这在科学上被称作磁偏角。)

  • 下标[0],方位角(azimuth):垂直于Z轴,沿Y轴正方向顺时针旋转的角度。
  • 下标[1],横摇(pitch):垂直于Y轴,沿Z轴正方向顺时针旋转的角度。
  • 下标[2],纵摇(roll):垂直于Y轴,沿X轴正方向顺时针旋转的角度。

我们的指南针只关心第一个元素,也就是方位角。不同传感器的返回值的含义各有不同,对此需要查询相应的文档http://d.android.com/reference/android/hardware/SensorManager.html。

图13.1. 坐标轴