【Android】传感器初步学习心得

一、传感器基础

根据官方文档,Android传感器有三大类,分别是:

  • Motion sensors
  • Environmental sensors
  • Position sensors

如果从另一角度来划分的话,传感器又可以分为基于硬件的和基于软件的两大类。基于硬件的传感器一般是通过物理组件去实现的。一般通过测量特殊环境的属性来获取数据,如:重力加速度、地磁场强度或方位角度的变化。而基于软件的传感器并不依赖物理设备,尽管他们是模仿基于硬件的传感器的。基于软件的传感器通常是通过一个或更多的硬件传感器获取数据,并且有时会调用虚拟传感器或人工传感器等等,线性加速度传感器和重力传感器就是基于软件传感器的例子。

下面通过官方的一张图看看安卓平台支持的所有传感器类型:
image01
image02
image03

使用传感器的话那么首先需要了解的是传感器API。Android中传感器类是通过Sensor类表示的,它属于android.hardware包下的类,顾名思义,和硬件相关的类。传感器的API不复杂,包含3个类和一个接口,分别是:

  • SensorManager:可以通过这个类去创建一个传感器服务的实例,这个类提供的各种方法可以访问传感器列表、注册或解除注册传感器事件监听、获取方位信息等。
  • Sensor:用于创建一个特定的传感器实例,这个类提供的方法可以让你决定一个传感器的功能。
  • SensorEvent:系统会通过这个类创建一个传感器事件对象,提供了一个传感器的事件信息,包含一下内容,原生的传感器数据、触发传感器的事件类型、精确的数据以及事件发生的时间。
  • SensorEventListener:可以通过这个接口创建两个回调用法来接收传感器的事件通知,比如当传感器的值发生变化时。

不同传感器在不同Android版本中的可用性不同,一些传感器在高版本下已经被弃用。下面是传感器的可用性表格:

二、常见的传感器用法

首先,我们要了解传感器坐标系统这个概念:

在Android平台中,传感器框架通常是使用一个标准的三维坐标系去表示一个值的。以方向传感器为例,确定一个方向当然也需要一个三维坐标,毕竟我们的设备不可能永远水平端着吧,准确的说android给我们返回的方向值就是一个长度为3的float数组,包含三个方向的值。

下面看一下官方提供的传感器API使用的坐标系统示意图:

仔细看一下这张图,不难发现,z是指向地心的方位角,x轴是仰俯角(由静止状态开始前后反转),y轴是翻转角(由静止状态开始左右反转)。下面切入正题,看看如何通过方向传感器API去获取方向。结合上面的图再看看官方提供的方向传感器事件的返回值:

这与上面提到的相吻合了,是由一个长度为3的float数组去表示一个位置信息的。数组第一个元素表示z轴,第二个信息表示x轴,第三个信息表示y轴。

1.实例化SensorManager

2.获取设备支持的全部Sensor的List

因此,可以通过下面的方法将手机所支持的传感器全部列出来:

布局代码:

MainActivity代码:

三、Orientation Sensor的使用

Android平台提供了两个传感器来让我们判断设备位置,分别是:地磁场传感器和方向传感器。其中,方向传感器是基于软件的,并且它的数据是通过加速度传感器和磁场传感器共同获得的。

具体算法已经封装好,我们不必去关心他们的实现。只用了解如何运用即可。

下面是方向传感器的具体运用:

布局代码:

MainActivity代码:

评 论 区

  1. 还没有任何评论,你来说两句吧

发表评论

%d 博主赞过: