传感器

作者: 夜沐下的星雨 | 来源:发表于2020-06-06 10:25 被阅读0次

一.Android的三大类传感器

Android传感器按大方向划分大致有三类传感器:动作(Motion)传感器、环境(Environmental)传感器、位置(Position)传感器。

1.动作传感器

这类传感器在三个轴(x、y、z)上测量加速度和旋转角度。包括如下几个传感器:加速(accelerometer [əkˌseləˈrɒmɪtə(r)])传感器、重力(gravity)传感器、陀螺仪(gyroscope [ˈdʒaɪrəskəʊp])传感器、旋转向量(rotational vector )传感器

下面来看一下传感器世界的坐标系:


zuobiao.PNG
2.环境传感器

这类传感器可以测量不同环境的参数,例如,周围环境的空气温度和压强、光照强度和湿度。包括如下几个传感器:
湿度(barometer)传感器、光线(photometer)传感器、温度(thermometer [θəˈmɒmɪtə(r)] )传感器

3.位置传感器

这类传感器可以测量设备的物理位置。包括如下几个传感器:方向(orientation)传感器、磁力(magnetometer)传感器

二.Android传感器框架

Android为我们提供的传感器框架(Android sensor framework,简称ASF)。

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

1)确定当前Android设备内置了哪些传感器。
2)确定某一个传感器的技术指标。
3)获取传感器传回来的数据,以及定义传感器回传数据的精度。
4)注册和注销传感器事件监听器,这些监听器用于监听传感器的变化,通常从传感器回传的数据需要利用这些监听器完成。

ASF允许我们访问很多传感器类型,这些传感器有一些是基于硬件的传感器,还有一些是基于软件的传感器。基于硬件的传感器就是直接以芯片形式嵌入到Android设备中,这些传感器直接从外部环境获取数据。基于软件的传感器并不是实际的硬件芯片,基于软件的传感器传回的数据本质上也来自于基于硬件的传感器,只是这些数据通常会经过二次加工。所以基于软件的传感器也可以称为虚拟(virtual)传感器或合成(synthetic)传感器。

Android对每个设备的传感器都进行了抽象,其中SensorManger类用来控制传感器,Sensor用来描述具体的传感器,SensorEventListener用来监听传感器值的改变。

(1)SensorManager类

用于创建sensor service的实例。该类提供了很多用于访问和枚举传感器,注册和注销传感器监听器的方法。而且还提供了与传感器精度、扫描频率、校正有关的常量。

(2)Sensor类

Sensor类为我们提供了一些用于获取传感器技术参数的方法。如版本、类型、生产商等。例如所有传感器的TYPE类型如下:

Sensor类为我们提供了一些用于获取传感器技术参数的方法。如版本、类型、生产商等。例如所有传感器的TYPE类型如下:


sensor.PNG

注意:1-8是硬件传感器,9是软件传感器,其中方向传感器的数据来自重力和磁场传感器,10-12是硬件或软件传感器。

(3)SensorEvent类

系统使用该类创建传感器事件对象。该对象可以提供与传感器事件有关的信息。传感器事件对象包括的信息有原始的传感器回传数据、传感器类型、数据的精度以及触发事件的时间。

(4)SensorEventListener接口

该接口包含两个回调方法,当传感器的回传值或精度发生变化时,系统会调用这两个回调方法。

/**
 * 传感器精度变化时回调
 */
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
/**
 * 传感器数据变化时回调
 */
@Override
public void onSensorChanged(SensorEvent event) {
}

三.获取传感器技术参数

下来我们编写代码来获取一下自己手机的传感器技术参数。

//获取传感器SensorManager对象
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL);
for (Sensor sensor : sensors) {
    tvSensors.append(sensor.getName() + "\n");
}

相关文章

网友评论

    本文标题:传感器

    本文链接:https://www.haomeiwen.com/subject/rmfbzhtx.html