onaccuracychanged如何理解?这篇文章值得收藏!

吉云

今天搞搞安卓开发,遇到个传感器相关的,叫 onAccuracyChanged,一开始真不知道这是个啥玩意。

我一开始是想做一个指南针的功能,需要用到传感器。看一些网上的资料,说要实现 SensorEventListener 这个接口,然后我就照着做。这个接口里有两个方法,一个是 onSensorChanged,另一个就是 onAccuracyChanged

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 这玩意,虽然现在看来没啥大用,但也算是解一下。以后遇到类似的需求,也算是有个底。这回就分享到这里,希望对大家有帮助。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]