Android 传感器的一般使用流程

一般情况下,很少直接去获取 Sensor,然后获取上面这些信息

更多的时候是去获取传感器采集到的数据,比如获取当前的大气压, 或者方向传感器三个角的值,或者陀螺仪的值

Android 对大部分封装了大部分传感器的底层实现,从而暴露统一的接口供开发者调用

所以,使用传感器有一个统一的流程

  1. 获得传感器管理器

    SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
    
  2. 调用特定方法获得需要的传感器

    比如下面的代码用于获取方向传感器

    Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    
  3. 实现 SensorEventListener 接口,重写 onSensorChanged 和 onAccuracyChanged 的方法

    方法 说明
    onSensorChanged 当传感器的值变化时会回调
    onAccuracyChanged 当传感器的进度发生改变时会回调
    @Override
    public void onSensorChanged(SensorEvent event) {
        final float[] _Data = event.values;
       this.mService.onSensorChanged(_Data[0],_Data[1],_Data[2]);
    }
    
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
    

    一般获取传感器数据的来源就是这个 SensorEvent,这个类中有一个 values 的变量 ,类型是 Float[] ,该变量最多有只有三个元素 ,而且传感器不同,对应元素代表的含义也不同,比如方向传感器中第一个元素是方位角的值,而气压传感器中第一个值则是气压值

  4. SensorManager 对象调用 registerListener() 注册监听器

    ms.registerListener(SensorEventListener, Sensor, int)
    

    参数说明

    参数 说明
    SensorEventListener 上下文对象
    Sensor Sensor 传感器对象
    int 传感器的延时时间的精度密度

    第三个参数的可能取值如下

    说明
    SENSOR_DELAY_FASTEST 延时 0ms
    SENSOR_DELAY_GAME 延时 20ms
    SENSOR_DELAY_UI 延时 60ms (推荐)
    SENSOR_DELAY_NORMAL 延时 200ms

    低延时意味着更频繁的检测,更意味着更多的电量消耗

    如果不是要求精度非常高的建议,别使用太高精度的,一般用第三个较多

  5. 监听器的取消注册

    用完就释放,一个很好的习惯,我们可以把他写到 Activity 或者 Service 的销毁方法中

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ms.unregisterListener(this);
    }
    

所有的传感器,大概的使用流程都这样,接下来我们会分别介绍几个常用的传感器

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.