传感器字面上的意思就是传递感觉的仪器,哪些感觉呢?

视觉、听觉、味觉、触觉、嗅觉等等。

所以有人说,传感器的存在和发展,让物体有了触觉、味觉和嗅觉等感官,让物体慢慢变得活了起来。

当前Android设备中已经集成进数十个传感器,我们比较常见的有加速度传感器、陀螺仪、地磁传感器等。

虽然种类繁多,但在Framework中仅仅提供了几个类和接口就把传感器相关的功能搞定了。下面我们以加速度传感器为例,引领大家走入Android传感器的世界。

x轴:从左到右

y轴:从下到上

z轴:从内到外

这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准。

sensor相关API被放到了android.hardware包下,我们主要使用的类有三个:Sensor、SensorEvent、SensorManager以及一个SensorEventListener接口。

SensorManager顺其自然的担任起管理的工作,负责注册监听某Sensor的状态;Sensor的数据通过SensorEvent返回。

SensorManager提供getSensorList方法,传入TYPE_ALL,即可得到当前设备所有传感器。

不同的传感器被提取共性后,由上面的编码套路规定起来,一切就变得如此简单啦。

这里的加速度特指重力加速度,所以在静止时重力传感器的返回值与加速度传感器值相同。

地表上静止物体的重力加速度约为9.8 m/s^2.

借用SensorManager中的常量:

public static final float STANDARD_GRAVITY=9.80665F;

我们可以借助三轴上的值来确定设备的状态(请参考上面的坐标图),比如:

1、当x轴的值接近重力加速度时,说明设备的左边朝下。

2、当x轴的值接近负的g值时,说明设备的右边朝下。

3、当y轴的值接近g值时,说明设备的下边超下(与上图一样)。

4、当y轴的值接近负的g值时,说明设备的上边朝下(倒置)。

5、当z轴的值接近g值时,说明设备的屏幕朝上。

6、当z轴的值接近负的g值时,说明设备屏幕朝下。