Android传感器

传感器定义:一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光,热, 湿度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官。

传感器分类:

  • 运动传感器:测量加速度和旋转力,包括加速度计,重力传感器,陀螺仪和旋转矢量传感器。
  • 环境传感器:测量各种周围环境情况,如环境温度、气压、光强、湿度等。包括气压计,光度计和温度计。
  • 位置传感器:测量设备的物理位置信息,包括方向传感器和磁力计。

传感器开发框架:

SensorManager:创建传感器服务的实例。这个类提供了多种方法来访问和列出传感器,注册和注销传感器事件监听器,并获取方向信息。该类还提供了几个传感器常量,用于报告传感器的精度,设置数据采集速率和校准传感器。

 // 获取传感器服务
 mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

Sensor创建特定的传感器实例。这个类提供了各种方法,让你确定一个传感器的能力。

List<Sensor> list = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);

传感器类型:

Sensor.TYPE_ACCELEROMETER:加速度传感器

Sensor.TYPE_GRAVITY:重力传感器

Sensor.TYPE_ORIENTATION:方向传感器

Sensor.TYPE_GYROSCOPE:陀螺仪传感器

Sensor.TYPE_MAGNETIC_FIELD:磁场传感器

Sensor.TYPE_LINEAR_ACCELERATION:线性加速度传感器

Sensor.TYPE_AMBIENT_TEMPERATURE:环境温度传感器

SensorEvent创建传感器事件对象,该对象提供有关传感器事件的信息。传感器事件对象包括以下信息:原始传感器数据,生成事件的传感器类型,数据的准确性以及事件的时间戳。

SensorEventListener创建两种回传方法,当传感器值更改或传感器准确度发生变化时,会接收通知(传感器事件)。

传感器数据读取步骤:

1、获取传感器信息,需要一下步骤:

  • 获取传感器管理器:Android提供了一个sensorManager管理器,通过这个类可以获取到都有哪些传感器。具体代码如下:
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

  • 获取设备的传感器列表:通过sensorManager管理器的getSensorList()方法,可以获取传感器对象列表,具体代码如下:
List<Sensor> list = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);
  • 迭代获取Sensor对象,调用对应方法获取相关信息:

2、获取传感器传回的数据:

  • 获取传感器管理器:
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

  • 调用特定方法获得需要的传感器:调用SensorManager 对象的getDefaultSensor方法,获取指定类型的传感器,例如这里使用光线传感器,具体代码:
Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

  • 实现SensorEventListener接口,重写onSensorChanged和onAccuracyChanged方法:
    • onSensorChanged(SensorEvent event):该方法在传感器的值发生改变的时候调用,其参数是一个SensorEvent 对象,通过该对象的values属性可以获取传感器的值,该值是一个数组,该变量最多有三个元素,而且传感器不同,对应元素代表的含义也不同
    • onAccuracyChanged(Sensor sensor , int accuracy):当传感器的进度发生改变时会回调,参数说明:

sensor:传感器对象

accuracy:表示传感器新的精度

private  SensorEventListener mSensorEventListener = new SensorEventListener(){
        // 当有新的传感器事件时调用
        @SuppressLint("NewApi")
        @Override
        public void onSensorChanged(SensorEvent event){
            String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
            // X、Y、Z轴的加速度
            String msg = String.format(Locale.ENGLISH, "%+8.4f, %+8.4f, %+8.4f",event.values[0], event.values[1], event.values[2]);
            data.setText(msg);
        }

        // 当注册传感器的精度发生变化时调用
        @Override
        public void onAccuracyChanged(Sensor sensor, int i) {}
    };
  • SensorManager对象调用registerListener注册监听器:通过调用sensorManager对象的registerListener()方法来注册监听事件。具体代码:
mSensorManager.registerListener(mSensorEventListener, mSensor, SensorManager.SENSOR_DELAY_FASTEST);

第一个参数是上下文对象,第二个是传感器对象,第三个是传感器的延时时间的精密程度,越精密越耗电。

精密程度的类型:

  • SENSOR_DELAY_FASTEST——延时:0ms
  • SENSOR_DELAY_GAME——延时:20ms
  • SENSOR_DELAY_UI——延时:60ms
  • SENSOR_DELAY_NORMAL——延时:200ms
  • 监听器注销:
mSensorManager.unregisterListener(this);

  • 31
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值