Android-Class(1)| Sensor

作者: yzbkaka | 来源:发表于2019-10-12 19:04 被阅读0次

    一.简介

    Android系统提供了对传感器的支持,如果手机的硬件提供了这些传感器的话,那么我们就可以通过代码获取手机外部的状态。比如说手机的摆放状态、外界的磁场、温度和压力等等。

    二.使用步骤

    1.获得传感器管理对象

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

    2.获取传感器的类型

    Sensor mSensor = mSensorManager.getDefaultSensor(传感器类型);
    

    传感器可选类型如下:

    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:压力传感器。

    3.为传感器注册监听器

    mSensorManager.registerListener(new SensorEventListener() {
            // 当传感器的值改变的时候回调该方法
            @Override
            public void onSensorChanged(SensorEvent event) {
    
            }
            // 当传感器精度发生改变时回调该方法
            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {
    
            }
        }, mSensor, SensorManager.SENSOR_DELAY_GAME);
    

    其中registerListener(SensorEventListener listener, Sensor sensor,int samplingPeriodUs)方法参数如下:

    • listener:监听传感器时间的监听器,该监听器需要实现SensorEventListener接口。
    • sensor:传感器对象。
    • samplingPeriodUs:指定获取传感器频率,一共有如下几种:
      1)SensorManager.SENSOR_DELAY_FASTEST:最快,延迟最小,同时也最消耗资源,一般只有特别依赖传感器的应用使用该频率,否则不推荐。
      2)SensorManager.SENSOR_DELAY_GAME:适合游戏的频率,一般有实时性要求的应用适合使用这种频率。
      3)SensorManager.SENSOR_DELAY_NORMAL:正常频率,一般对实时性要求不高的应用适合使用这种频率。
      4)SensorManager.SENSOR_DELAY_UI:适合普通应用的频率,这种模式比较省电,而且系统开销小,但延迟大,因此只适合普通小程序使用。

    4.取消注册传感器

    当我们在程序中不需要使用传感器后,需要我们进行手动取消注册释放资源:

    mSensorManager.unregisterListener(this);
    

    三.传感器作用详解

    1.陀螺仪传感器

    陀螺仪传感器用于感应手机的旋转速度。陀螺仪传感器给我们返回了当前设备的X、Y、Z三个坐标轴(坐标系统与加速度传感器一模一样)的旋转速度。旋转速度的单位是弧度/秒,旋转速度为:正值代表逆时针旋转,负值代表顺时针旋转。关于返回的三个角速度说明如下:

    • 第一个值:代表该设备绕X轴旋转的角速度。
    • 第二个值:代表该设备绕Y轴旋转的角速度。
    • 第三个值:代表该设备绕Z轴旋转的角速度。

    陀螺仪传感器一般是用于进行记步数功能的实现。

    2.磁场传感器

    磁场感应器主要读取设备周围的磁场强度。磁场传感器会返回三个数据,分别代表周围磁场分解到X、Y、Z三个方向的磁场分量,磁场数据的单位是微特斯拉。

    3.重力传感器

    重力传感器会返回一个三维向量,这个三维向量可显示重力的方向和强度。重力传感器的坐标系统和加速度传感器的坐标系统相同。

    4.温度传感器

    温度传感器用于获取设备所处环境的温度。温度传感器会返回一个数据,代表手机设备周围的温度,单位是摄氏度。

    5.光传感器

    光传感器用于获取设备周围光的强度。光传感器会返回一个数据,代表手机周围光的强度,单位是勒克斯。

    6.压力传感器

    压力传感器用于获取设备周围压力的大小。压力传感器会返回一个数据,代表设备周围压力的大小。

    7.心率传感器

    心率传感器是在5.0之后新增的一个传感器,用于返回佩戴设备的人每分钟的心跳次数。该传感器返回的数据准确性可以通过SensorEvent的accuracy进行判断,如果该属性值为:SENSOR_STATUS_UNRELIABLE或SENSOR_STATUS_NO_CONTACT,则表明传感器返回的数据是不太可靠的,应该丢弃。

    在使用心率传感器时,需要增加如下权限:

    <uses-permission android:name="android.permission.BODY_SENSORS"/>
    

    参考资料:https://blog.csdn.net/Airsaid/article/details/52902299

    相关文章

      网友评论

        本文标题:Android-Class(1)| Sensor

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