文章目录
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
——延时:0msSENSOR_DELAY_GAME
——延时:20msSENSOR_DELAY_UI
——延时:60msSENSOR_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 =