Android Sensor应用

本文介绍了Android平台支持的传感器类型,包括运动、位置和环境传感器,并详细讲解了如何使用SensorManager、Sensor、SensorEvent和SensorEventListener接口进行操作。通过步骤解析了如何注册和取消注册传感器监听器,以及如何根据不同的延迟精度选择合适的传感器更新频率。
摘要由CSDN通过智能技术生成

Sensor types supported by the Android Platform

Android支持的Sensor Type可以在/hardware/libhardware/include/hardware/sensor.h中查看,这里我截图过来了。
在这里插入图片描述

Classes and Interfaces

Sensor Manager

可以用SensorManager这个类创建sensor service的一个实例,它包含了:

  • listing sensor
  • registering and unregistering sensor listeners
  • acquiring orientation information

Sensor

可以用Sensor创建一个具体Sensor的实例,提供了获取该Sensor的特性。

SensorEvent

可以用SensorEvent类创建一个SensorEvent的对象,提供以下信息:

  • raw sensor data
  • type of sensor that generated the event
  • accuracy of the data
  • timestamp for the event

SensorEventListener

可以用这个接口创建两个回调函数去接收通知(sensor events)

  • sensor value改变时(onSensorChanged())
  • sensor accuracy改变时(onAccuracyChanged())

API and Example

使用步骤

Step1:获得传感器管理器

SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 

Step2:调用特定方法获得所需的传感器

Sensor mPressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);

Step3:实现SensorEventListener接口,重写onSensorChanged和onAccuracyChanged的方法。

    @Override
    public final void onAccuracyChanged(Sensor sensor, int accuracy) {
   
      // Do something here if sensor accuracy changes.
    }

    @Override
    public final void onSensorChanged(SensorEvent event) {
   
      float millibarsOfPressure = event.values[0];
      // Do something with this sensor data.
    }

Step4:SensorManager对象调用registerListener注册监听器,需要传入三个参数:

  • 上下文对象
  • Sensor传感器对象
  • 传感器的延时时间的精度密度
mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL);

其中传感器器延时时间的精度密度有四种:

  • SENSOR_DELAY_FASTEST——延时:0ms
  • SENSOR_DELAY_GAME——延时:20ms
  • SENSOR_DELAY_UI——延时:60ms
  • SENSOR_DELAY_NORMAL——延时:200ms
    低延时意味着频繁的检测,但是也意味着功耗越大,所以如果不是精度要求非常高,还是建议用第三个或者第四个。

Step5:监听器的取消注册

mSensorManager.unregisterListener(this);

Example

Motion sensors

Use the accelerometer

private SensorManager sensorManager;
private Sensor sensor;
  ...
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

public void onSensorChanged(SensorEvent event){
   
    // In this example, alpha is calculated as t / (t + dT),
    // where t is the low-pass filter's time-constant and
    // dT is the event delivery rate.

    final float alpha = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值