首页 > 代码库 > 1、传感器概述

1、传感器概述

传感器种类

 传感器是第二代智能手机的重要标志之一。可以毫不客气地说,现在市面上的Android手机和平板电脑(TV除外)都内置了传感器。否则很多游戏和应用就无法使用了。Android SDK支持的传感器并不是每一部Android设备都支持所有的传感器。大多数Android设备只支持一部分传感器。例如,方向传感器(电子罗盘)、重力传感器(屏幕翻转、赛车游戏等)。

动作(Motion)传感器

 这类传感器在三个轴(X、Y、Z)上测量加速度和旋转角度。包括如下几个传感器。

 加速(accelerometer)传感器

 重力(gravity)传感器

 陀螺仪(gyroscope)传感器

 旋转向量(rotational vector )传感器

环境(Environmental)传感器

 这类传感器可以测量不同环境的参数,例如,周围环境的空气温度和压强、光照强度和湿度。包括如下几个传感器。

 湿度(barometer)传感器

 光线(photometer)传感器

 温度(thermometer)传感器

位置(Position)传感器

这类传感器可以测量设备的物理位置。包括如下几个传感器。

 方向(orientation)传感器

 磁力(magnetometer)传感器

 

Android sensor framework

      Android SDK提供了Android sensor framework,可以用来访问当前Android设备内置的传感器。ASF提供了很多类和接口,可以帮助我们完成各种与传感器有关的任务。例如,可以利用ASF完成下面的工作。

确定当前Android设备内置了哪些传感器。

* 确定某一个传感器的技术指标。例如,该传感器能测量的最大范围、传感器的制造商、对电量的要求、测量的精度等。
* 获取传感器传回来的数据,以及定义传感器回传数据的精度。
* 注册和注销传感器事件监听器,这些监听器用于监听传感器的变化,通常从传感器回传的数据需要利用这些监听器完成。

 

硬件传感器和软件传感器

ASF允许我们访问很多传感器类型,这些传感器有一些是基于硬件的传感器,还有一些是基于软件的传感器。基于硬件的传感器就是直接以芯片形式嵌入到Android设备中,这些传感器直接从外部环境获取数据,例如,加速传感器、磁场传感器都属于硬件传感器。基于软件的传感器并不是实际的硬件芯片,尽管这些传感器重使用上很像基于硬件的传感器。基于软件的传感器传回的数据本质上也来自于基于硬件的传感器,只是这些数据通常会经过二次加工,也就是说,基于软件的传感器传回的数据可能来自一个或多个基于硬件的传感器,并且有可能Android系统使用某些算法处理了这些数据。所以基于软件的传感器也可以称为虚拟(virtual)传感器或合成(synthetic)传感器。

ASF支持的传感器

所有的常量都在Sensor类中定义。

1.TYPE_ACCELEROMETER:加速传感器(硬件传感器)
2.TYPE_AMBIENT_TEMPERATURE:温度传感器(硬件传感器)
3.TYPE_GRAVITY:重力传感器(硬件或软件传感器)
4.TYPE_GYROSCOPE:陀螺仪传感器(硬件传感器)
5.TYPE_LIGHT:光线传感器(硬件传感器)
6.TYPE_LINEAR_ACCELERATION:线性加速传感器(硬件或软件传感器)
7.TYPE_MAGNETIC_FIELD:磁场传感器(硬件传感器)
8.TYPE_ORIENTATION:方向传感器(软件传感器),数据来自重力和磁场传感器
9.TYPE_PRESSURE:压力传感器(硬件传感器)
10.TYPE_PROXIMITY:临近传感器(硬件传感器)
11.TYPE_RELATIVE_HUMIDITY:湿度传感器(硬件传感器)
12.TYPE_ROTATION_VECTOR:旋转向量传感器(硬件或软件传感器)

13.  TYPE_TEMPERATURE:温度传感器(硬件传感器),从Android4.0(API Level = 14)开始被TYPE_AMBIENT_TEMPERATURE取代。

 

ASF中的主要类和接口
@  SensorManager类:用于创建sensor service的实例。该类提供了很多用于访问和枚举传感器,注册和注销传感器监
     听器的方法。而且还提供了与传感器精度、扫描频率、校正有关的常量。
@  nSensor类:提供了一些用于获取传感器技术参数的方法。如版本、类型、生产商等。
@  SensorEvent类:系统使用该类创建传感器事件对象。该对象可以提供与传感器事件有关的信息。传感器事件对象包括
     的信息有原始的传感器回传数据、传感器类型、数据的精度以及触发事件的时间。
@  SensorEventListener接口:该接口包含两个回调方法,当传感器的回传值或精度发生变化时,系统会调用这两个回调
     方法。
 
范例:获取当前Android设备支持的传感器
 1 import java.util.List; 2 import android.app.Activity; 3 import android.hardware.Sensor; 4 import android.hardware.SensorManager; 5 import android.os.Bundle; 6 import android.widget.TextView; 7  8 public class Main extends Activity { 9 10     private TextView tvSensors;11     private SensorManager sensorManager;12 13     @Override14     public void onCreate(Bundle savedInstanceState) {15         super.onCreate(savedInstanceState);16         setContentView(R.layout.main);17 18         tvSensors = (TextView) findViewById(R.id.tvSensors);19         sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);20         List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);21         for (Sensor sensor : sensors) {22             tvSensors.append(sensor.getName() + "\n");23         }24 25     }26 27 }