Android硬件开发------计步传感器

在上一节《Android硬件开发------传感器介绍》中,简单介绍了Android手机的传感器类型,通过SensorManager引出传感器的使用方法,通过注册监听器,监听传感器返回的参数,本节开始就介绍几个传感器的使用。

1、计步传感器
在Sensor类中,有两个计步传感器的类型,分别是TYPE_STEP_DETECTORTYPE_STEP_COUNTER看似是两个类型一致的传感器类型,其实在使用的时候还是不一样的。

TYPE_STEP_DETECTOR:和其他传感器一样,先注册监听,得到传感器返回的结果。

sensorManager.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                Log.e("TAG","values===="+values[0]);
                if(values[0] == 1.0f){
                    step ++;
                }
                tv_step.setText(step+"");
                Log.e("TAG","length==="+values.length);
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        },stepSensor,SensorManager.SENSOR_DELAY_NORMAL);

onSensorChanged方法中,values数组中保存的就是返回的步数,只有一个数据1.0f,也就是步数的计量单位,每走一步就会做一次回调。

2020-02-11 15:41:12.933 30445-30445/com.example.sensor E/TAG: values====1.0
2020-02-11 15:41:12.934 30445-30445/com.example.sensor E/TAG: length===1

TYPE_STEP_COUNTER :记录的是从传感器注册开始,到现在,记录的总步数,它始终是比TYPE_STEP_DETECTOR要多。

 sensorManager.registerListener(new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent event) {
                float[] values = event.values;
                tv_all.setText(Float.toString(values[0]));
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        },stepcountSensor,SensorManager.SENSOR_DELAY_NORMAL);

测试计步器

(1)当我们打开APP的时候,查看总步数和当前走的步数:
在这里插入图片描述
(2)走了一会儿,走了59步,59步全部加在了总步数上;
在这里插入图片描述
(3)退出APP,再次重新登录
在这里插入图片描述
(4)又走了34步,总数加上
在这里插入图片描述
(5)那么我们不登录APP,走了一会儿,再次进入:
在这里插入图片描述
发现总步数又变了,就是增加了我们刚才行走的步数。因此我们可以得出结论:TYPE_STEP_DETECTOR就是监测当前我们打开APP的这段时间走的步数,退出重新登录,数据清零;TYPE_STEP_COUNTER 是不管我们在前台还是在后台,都会记录我们所走的步数。
所以,我们在设计计步器的时候,像微信运动这些,我们显示这一天所走的步数,就可以使用TYPE_STEP_COUNTER,而且在回调事件SensorEvent 中,除了values字段之外,还有timestamp字段,显示当前的时间戳;如果这一天过去了,就将步数清零,重新开始计数。
其实大部分的传感器的使用,都是如此,通过SensorManager获取具体的传感器对象,注册监听,获取回调。之后如果有项目中使用到传感器,会再介绍使用方法。

发布了22 篇原创文章 · 获赞 6 · 访问量 2630

猜你喜欢

转载自blog.csdn.net/qq_33235287/article/details/104263856