一、引入:
手机内置的传感器是一种微型的物理设备,它能够探测、感受外界的信号,将来自真实世界的数据提供给应用程序,应用程序然后使用传感器数据向用户通知真实世界的情况,或用来控制游戏进度、或实现增强现实等。至于具体如何去利用这些信息就要充分发挥开发者的想象力了。
传感器目前已经成为了智能手机的标配。比较常见的传感器有:方向传感器、磁场传感器、温度传感器、光传感器、压力传感器、加速度传感器、重力传感器、陀螺仪传感器等。传感器就像一个个触手,不断采集着外部的信息,并将这些信息传送回手机进一步处理。在Android的特色开发技术中,除了基于位置的服务外,传感器技术绝对是最值得期待的技术。通过在Android应用中添加传感器,可以充分激发开发者的想象力,开发出各种新奇的程序。比如电子罗盘、水平仪,各种感知型游戏。
目前Android设备中可能出现的一些传感器类型包括:
- 方向传感器
- 磁场传感器
- 温度传感器
- 光传感器
- 压力传感器
- 加速度计
- 距离传感器
- 陀螺仪传感器
- 重力传感器(Android2.3开始)
- 线性加速度传感器(Android2.3开始)
- 旋转矢量传感器(Android2.3开始)
- 相对湿度传感器(Android2.3开始)
- NFC(近场通信)传感器(Android2.3开始):NFC传感器与其他传感器不同,因为它使用与其他传感器完全不同的方式来访问。
二、检测设备中的传感器 :
Android SDK中定义了十多种传感器,但是不是每个手机都完全支持这些传感器。Google Nexus S支持9种传感器,HTC G7支持5种,红米手机支持9种(不支持压力、温度和相对湿度传感器)。如果手机不支持的传感器,程序运行往往不会抛出异常,只是无法获得传感器传回的数据。
那么如何知道设备上有哪些传感器可用呢?有两种方式:一是直接的,二是间接的。
1、直接方式:
首先获取SensorManager对象,通过上下文对象的getSystemService(SENSOR_SERVICE)方法就可以获取到系统的传感器管理服务。然后调用SensorManager对象的getSensorList()方法获取传感器集合,遍历获取到的集合就能得到传感器信息。
表1 传感器类型
方法 |
说明 |
int TYPE_ACCELEROMETER = 1 |
三轴加速度传感器(返回三个坐标轴的加速度,单位m/s2) |
int TYPE_MAGNETIC_FIELD = 2 |