今天搞搞安卓开发,遇到个传感器相关的,叫 onAccuracyChanged,一开始真不知道这是个啥玩意。
我一开始是想做一个指南针的功能,需要用到传感器。看一些网上的资料,说要实现 SensorEventListener 这个接口,然后我就照着做。这个接口里有两个方法,一个是 onSensorChanged,另一个就是 onAccuracyChanged。
onSensorChanged 我大概知道,就是传感器数值变化的时候会触发。但我当时想,onAccuracyChanged 这玩意有啥用?看名字好像是跟精度有关系,但具体干啥的,不清楚。
网上查查资料,大概意思是说,当传感器的精度发生变化时,这个方法会被调用。比如说,从低精度变成高精度,或者反过来。它有两个参数,一个是 Sensor 对象,告诉你哪个传感器精度变;另一个是 accuracy,告诉你新的精度是
- 我一开始还琢磨着,要不要在这个方法里做点比如过滤一下数据,只要高精度的数据。但后来发现,好像没啥必要,因为大多数情况下,我只需要最新的传感器数据就行,精度啥的,不太关心。
- 不过知道有这么个东西也万一以后遇到需要根据精度做处理的情况,也知道该咋办。
然后我就开始写代码:
先是获取传感器管理器的实例,然后注册监听器:
// 获取传感器管理器
SensorManager sensorManager = (SensorManager) getSystemService(*_SERVICE);
// 获取方向传感器
Sensor sensor = *(*_ORIENTATION);
// 注册监听器
*(this, sensor, *_DELAY_GAME);
上面这段代码的意思是,获取方向传感器(TYPE_ORIENTATION),然后以SENSOR_DELAY_GAME的频率去监听数据的变化,数值变化的时候会调用 onSensorChanged,精度变化的时候会调用 onAccuracyChanged,而这里的 this 指的就是当前这个实现 SensorEventListener 接口的类。
然后实现接口的两个方法:
@Override
public void onSensorChanged(SensorEvent event) {
// 获取传感器数值
float[] values = *;
// values[0] 就是方向值
float degree = values[0];
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
//传感器精度变化
我在 onSensorChanged 方法里获取传感器的数值,然后把方向值取出来。在 onAccuracyChanged 方法里,我啥也没干,就留个空方法。
别忘在不用传感器的时候取消注册,不然会费电:
@Override
protected void onPause() {
// 取消注册
*(this);
onAccuracyChanged 这玩意,虽然现在看来没啥大用,但也算是解一下。以后遇到类似的需求,也算是有个底。这回就分享到这里,希望对大家有帮助。