如何获取Android设备所支持的传感器种类

在使用Android传感器之前,我们首先要弄清楚当前Android设备支持哪些传感器,只有这样我们才能继续操作。在Android2.3以前,只能支持8中传感器的API接口。在Android2.3以后,支持12种传感器的API接口。但是一般手机不会集成所有的传感器, 大部分只支持一部分传感器:方向传感器、重力传感器等。
传感器大致可分为三大类

  • 动作(Motion)传感器
  • 环境(Environmental)传感器
  • 位置(Position)传感器

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

  • 加速(accelerometer)传感器
  • 陀螺仪(gyroscope)传感器
  • 重力(gravity)传感器
  • 线性加速(linear acceleration)传感器
  • 旋转向量(rotational vector)传感器

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

  • 温度(barometer)传感器
  • 光线(photometer)传感器
  • 温度(thermometer)传感器
  • 压力(pressure)传感器

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

  • 方向(orientation)传感器(数据来自加速传感器和磁场传感器)
  • 磁场(magnetomenter)传感器

以上传感器只是部分,后面将用代码获取到手机所支持的传感器类型。再此之前我们还需要了解ASF,所谓ASF就是Android SDK提供的Android sensor framework(Android传感器框架),其作用是用来访问当前Android设备内置的传感器,帮助我们完成各种与传感器有关的任务。例如:

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

ASF支持的传感器:

TYPE_ACCELEROMETER         //加速度传感器(硬件)
TYPE_MAGNETIC_FIELD        //磁场传感器(硬件)
TYPE_ORIENTATION           //方向传感器(软件传感器,数据来自重力和磁场传感器)
TYPE_GYROSCOPE             //陀螺仪传感器(硬件)
TYPE_LIGHT                 //光线传感器(硬件)
TYPE_PRESSURE              //压力传感器(硬件)
TYPE_PROXIMITY             //临近传感器(硬件)
TYPE_GRAVITY               //重场传感器(硬件或软件)
TYPE_LINEAR_ACCELERATION   //线性加速度传感器(硬件或软件)
TYPE_ROTATION_VECTOR       //旋转矢量传感器(硬件或软件)
TYPE_RELATIVE_HUMIDITY     //湿度传感器(硬件)
TYPE_AMBIENT_TEMPERATURE   //温度传感器(硬件)
TYPE_TEMPERATURE           //温度传感器(硬件),从Android4.0开始被TYPE_AMBIENT_TEMPERATURE取代

ASF的主要类和接口:

  • SensorManager类:用于创建sensor service的实例。该类提供了很多用于访问和枚举传感器、注册和注销传感器监听器的方法。而且还提供了与传感器精度、扫描频率、校正有关的常量。
  • Sensor类:提供了一些用于获取传感器技术参数的方法。如版本、类型、生产商等。
  • SensorEvent类:系统使用该类创建传感器事件对象。该对象可以提供与传感器事件相关的信息。传感器事件对象包括的信息有:原始的传感器回传数据、传感器类型、数据的精度以及触发事件的时间。
  • SensorEventListener接口:该接口包含两个回调方法,当传感器的回传值或精度发生变化时,系统会调用这两个回调方法。

前面已经对传感器做了一部分说明,下面我们将用程序获取手机支持的传感器种类

获取手机支持的传感器种类比较简单,首先我们要获取系统的传感器服务,用于创建Sensor service的实例,然后使用getSensorList获取传感器的集合,代码如下:

public class MainActivity extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);

        SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);  //获取系统的传感器服务并创建实例

        List list = sm.getSensorList(Sensor.TYPE_ALL);  //获取传感器的集合
        for (Sensor sensor:list){
            tv.append(sensor.getName() + "\n");  //把传感器种类显示在TextView中
        } 
    }
}

如何获取Android设备所支持的传感器种类_第1张图片

你可能感兴趣的:(Android学习杂记)