资讯详情

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 以百分比测量环境的相对湿度 (%) 表示。 监测露点、绝对湿度和相对湿度。

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

基本使用

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

 除了加速度传感器,我们还可以获得其他类型的传感器,如:         //* 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); 

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);

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


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

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

常用方法

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

以下是通过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传感器类别

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台