Android之传感器(三)方向传感器
一,简介
要说 Android 中另外一个比较常用的传感器应该就是方向传感器了。方向传感器的使用
场景要比其他的传感器更为广泛,它能够准确地判断出手机在各个方向的旋转角度,利用这
些角度就可以编写出像指南针、地平仪等有用的工具。另外,在本章开始时介绍的通过旋转
设备来控制方向的赛车游戏,也是使用方向传感器来完成的。那么我们仍然还是先来看一下
方向传感器的用法吧。
二,方向传感器的用法
Android 获取手机旋转的方向和角度是通过加速度传感器和地磁传感器共同计算得出的,这也是 Android 目
前推荐使用的方式。首先我们需要分别获取到加速度传感器和地磁传感器的实例,并给它们注册监听器,如
下所示:
Sensor accelerometerSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_ACCELEROMETER);
Sensor magneticSensor = sensorManager.getDefaultSensor(Sensor.
TYPE_MAGNETIC_FIELD);
sensorManager.registerListener(listener, accelerometerSensor,
SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(listener, magneticSensor,
SensorManager.SENSOR_DELAY_GAME);
由于方向传感器的精确度要求通常都比较高, 这里我们把传感器输出信息的更新速率提
高了一些,使用的是 SENSOR_DELAY_GAME。
接下来在 onSensorChanged()方法中可以获取到 SensorEvent 的 values 数组,分别记录着
加速度传感器和地磁传感器输出的值。然后将这两个值传入到 SensorManager 的
getRotationMatrix()方法中就可以得到一个包含旋转矩阵的 R数组,如下所示:
SensorManager.getRotationMatrix(R, null, accelerometerValues, magneticValues);
其中第一个参数 R 是一个长度为 9 的 float 数组,getRotationMatrix()方法计算出的旋转
数据就会赋值到这个数组当中。 第二个参数是一个用于将地磁向量转换成重力坐标的旋转矩
阵,通常指定为 null 即可。第三和第四个参数则分别就是加速度传感器和地磁传感器输出的
values 值。
得到了 R 数组之后,接着就可以调用 SensorManager 的 getOrientation()方法来计算手机
的旋转数据了,如下所示:
SensorManager.