Android传感器简单总结

Posted Alex_MaHao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android传感器简单总结相关的知识,希望对你有一定的参考价值。

后续不断完善

概述

android 平台支持三大类传感器:

  • 动态传感器

这类传感器测量三个轴向上的加速力和旋转力。这个类别中包含加速度计、重力传感器、陀螺仪和旋转矢量传感器。

  • 环境传感器

这类传感器测量各种环境参数,如环境气温、气压、照度和湿度。这个类别中包含气压计、光度计和温度计。

  • 位置传感器

这类传感器测量设备的物理位置。这个类别中包含屏幕方向传感器和磁力计。

具体类型

传感器说明常见用途
TYPE_ACCELEROMETER测量在所有三个物理轴向(x、y 和 z)上施加在设备上的加速力(包括重力),以 m/s2 为单位。动态检测(摇晃、倾斜等)。
TYPE_GRAVITY测量在所有三个物理轴向(x、y、z)上施加在设备上的重力,单位为 m/s2。动态检测(摇晃、倾斜等)。
TYPE_GYROSCOPE测量设备在三个物理轴向(x、y 和 z)上的旋转速率,以 rad/s 为单位。旋转检测(旋转、转动等)。
TYPE_LINEAR_ACCELERATION测量在所有三个物理轴向(x、y 和 z)上施加在设备上的加速力(不包括重力),以 m/s2 为单位。监测单个轴向上的加速度。
TYPE_ORIENTATION测量设备围绕所有三个物理轴(x、y、z)旋转的度数。从 API 级别 3 开始,您可以结合使用重力传感器、地磁场传感器和 getRotationMatrix() 方法来获取设备的倾角矩阵和旋转矩阵。确定设备位置。
TYPE_PROXIMITY测量物体相对于设备显示屏幕的距离,以 cm 为单位。该传感器通常用于确定手机是否被举到人的耳边。传感器通常用于确定手机是否被举到人的耳边。 通话过程中手机的位置。
TYPE_ROTATION_VECTOR通过提供设备旋转矢量的三个元素来检测设备的屏幕方向。动态检测和旋转检测。
TYPE_AMBIENT_TEMPERATURE以摄氏度 (°C) 为单位测量环境室温。监测气温。
TYPE_LIGHT测量环境光级(照度),以 lx 为单位。控制屏幕亮度。
TYPE_PRESSURE测量环境气压,以 hPa 或 mbar 为单位。监测气压变化。
TYPE_RELATIVE_HUMIDITY测量环境的相对湿度,以百分比 (%) 表示。监测露点、绝对湿度和相对湿度。

以上的传感器有的是由硬件支持,有的是由软件通过多个传感器结合之后计算支持

基本使用

1.获取SensorManager对象

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

2.获取具体的传感器类型

 //这里我们除了可以获取加速度传感器之外,还可以获取其他类型的传感器,如:
        //* Sensor.TYPE_ORIENTATION:方向传感器。
        //* Sensor.TYPE_GYROSCOPE:陀螺仪传感器。
        //* Sensor.TYPE_MAGNETIC_FIELD:磁场传感器。
        //* Sensor.TYPE_GRAVITY:重力传感器。
        //* Sensor.TYPE_LINEAR_ACCELERATION:线性加速度传感器。
        //* Sensor.TYPE_AMBIENT_TEMPERATURE:温度传感器。
        //* Sensor.TYPE_LIGHT:光传感器。
        //* Sensor.TYPE_PRESSURE:压力传感器。

        // 获取传感器的类型
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

3.注册监听和解注册

onResume()中注册监听

mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);

注册时第三个参数指示回调的频率,基于性能考虑,可选参数如下:


    /** get sensor data as fast as possible 延迟0微秒 */
    public static final int SENSOR_DELAY_FASTEST = 0;
    /** rate suitable for games 延迟 20 000 微秒 */
    public static final int SENSOR_DELAY_GAME = 1;
    /** rate suitable for the user interface 延迟 60 000 微秒  */
    public static final int SENSOR_DELAY_UI = 2;
    /** rate (default) suitable for screen orientation changes  延迟 200,000  微秒*/
    public static final int SENSOR_DELAY_NORMAL = 3;

onStop()中解注册


mSensorManager.unregisterListener(this);

4.监听回调方法

上一步中注册的监听方法,对应的回调的方法如下


  @Override
    public void onSensorChanged(SensorEvent event) 
       // 回调当前的相关传感器结果
    

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) 
        // 精度发生改变
    

常用方法

获取当前设备传感器列表

List<Sensor> deviceSensors = sensorManager.getSensorList(Sensor.TYPE_ALL);

Sensor对象常见属性

以下是通过toString()打印的对象属性

Sensor name="ICM20690 Accelerometer", vendor="InvenSense", version=1, type=1, maxRange=78.4532, resolution=0.0023956299, power=0.325, minDelay=5000

vendorversion表示制造商和版本,可以根据该字段来判断是否使用该传感器,进行区分操作

minDelay:传感器可用于检测数据的最小时间间隔(以微秒为单位,1s = 100万μs),如果返回0表示数据变化是才会报告数据,非0表示定时检测并更新数据

power:传感器的电量要求

resolution:传感器的分辨率

MaxRange:最大量程

传感器坐标系

x轴:屏幕向右
y轴:屏幕向上
z轴:垂直屏幕向外

方向传感器的三个值

而方向传感器则刚好有三个元素,都表示度数! 对应的含义如下:

  • values[0]:方位角,手机绕着Z轴旋转的角度。0表示正北(North),90表示正东(East), 180表示正南(South),270表示正西(West)。
  • values[1]:倾斜角,手机翘起来的程度,当手机绕着x轴倾斜时该值会发生变化。取值 范围是[-180,180]之间。假如把手机放在桌面上,而桌面是完全水平的话,values1的则应该 是0,当然很少桌子是绝对水平的。从手机顶部开始抬起,直到手机沿着x轴旋转180(此时屏幕 乡下水平放在桌面上)。在这个旋转过程中,values[1]的值会从0到-180之间变化,即手机抬起 时,values1的值会逐渐变小,知道等于-180;而加入从手机底部开始抬起,直到手机沿着x轴 旋转180度,此时values[1]的值会从0到180之间变化。我们可以利用value[1]的这个特性结合 value[2]来实现一个平地尺!
  • value[2]:滚动角,沿着Y轴的滚动角度,取值范围为:[-90,90],假设将手机屏幕朝上水平放在 桌面上,这时如果桌面是平的,values2的值应为0。将手机从左侧逐渐抬起,values[2]的值将 逐渐减小,知道垂直于手机放置,此时values[2]的值为-90,从右侧则是0-90;加入在垂直位置 时继续向右或者向左滚动,values[2]的值将会继续在-90到90之间变化!

以上是关于Android传感器简单总结的主要内容,如果未能解决你的问题,请参考以下文章

android开发笔记之高级主题—传感器的简单介绍

Android中的“重力”和“加速度”传感器有啥区别?

android 传感器 教程

资产监测设备中MPU6050重力测量范围

H5之重力感应篇

MMS-Q系列有线倾角传感器