一、使用Android内置传感器 TYPE_STEP_COUNTER 和 TYPE_STEP_DETECTOR

TYPE_STEP_COUNTER 记录开机以来的总步数,适合用于开发计步器。

A sensor of this type returns the number of steps taken by the user since the last reboot while activated. The value is returned as a float (with the fractional part set to zero) and is reset to zero only on a system reboot. The timestamp of the event is set to the time when the last step for that event was taken. This sensor is implemented in hardware and is expected to be low power. If you want to continuously track the number of steps over a long period of time, do NOT unregister for this sensor, so that it keeps counting steps in the background even when the AP is in suspend mode and report the aggregate count when the AP is awake. Application needs to stay registered for this sensor because step counter does not count steps if it is not activated. This sensor is ideal for fitness tracking applications.

TYPE_STEP_DETECTOR 检测到用户走了一步就向SensorEventListener传递一个浮点值1.0

A sensor of this type triggers an event each time a step is taken by the user. The only allowed value to return is 1.0 and an event is generated for each step. Like with any other event, the timestamp indicates when the event (here the step) occurred, this corresponds to when the foot hit the ground, generating a high variation in acceleration. This sensor is only for detecting every individual step as soon as it is taken, for example to perform dead reckoning. If you only need aggregate number of steps taken over a period of time, register for TYPE_STEP_COUNTER instead.

布局只是一个TextView,代码就略过了,下面是主程序:

package com.lee.sensordemo;

import android.app.Activity;

import android.content.Context;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.os.Bundle;

import android.widget.TextView;

public class TestStepActivity extends Activity {

private TextView mStepTV;

private SensorManager mSensorManager;

private MySensorEventListener mListener;

private int mStepDetector = 0; // 自应用运行以来STEP_DETECTOR检测到的步数

private int mStepCounter = 0; // 自系统开机以来STEP_COUNTER检测到的步数

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_test_step);

mStepTV = findViewById(R.id.step_tv);

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

mListener = new MySensorEventListener();

}

@Override

protected void onResume() {

super.onResume();

mSensorManager.registerListener(mListener, mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR),

SensorManager.SENSOR_DELAY_NORMAL);

mSensorManager.registerListener(mListener, mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER),

SensorManager.SENSOR_DELAY_NORMAL);

}

@Override

protected void onPause() {

super.onPause();

mSensorManager.unregisterListener(mListener);

}

class MySensorEventListener implements SensorEventListener {

@Override

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {

if (event.values[0] == 1.0f) {

mStepDetector++;

}

} else if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {

mStepCounter = (int) event.values[0];

}

String desc = String.format("设备检测到您当前走了%d步,自开机以来总数为%d步", mStepDetector, mStepCounter);

mStepTV.setText(desc);

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

}

}

计步效果:当用户走了一定的步数后,两个计步器的步数才会开始变化。区别在于每次行走时,TYPE_STEP_COUNTER 会缓存步数,当检测到步数大于10步时,TYPE_STEP_COUNTER 会一次性加10步,后续的步数就实时变化,直到用户停止行走。而TYPE_STEP_DETECTOR 不会缓存步数,只有用户走了8~10步时,TYPE_STEP_DETECTOR 才会开始连续记录步数,直到用户停止行走。

android 计步功能原理,Android开发——计步功能相关推荐

  1. android theme继承原理,android – 使用Holo父主题从Theme.Light继承editText

    所以我的想法是从android:Theme.Holo.Light扩展一个自定义主题(实际上只是一种风格),然后覆盖EditText属性以使用android:Theme中的父设置. 它看起来像andro ...

  2. android自动帧率原理,Android 帧率计算及优化

    在开发者选项中有个" GPU呈现模式分析(Profile GPU rendering,选择在adb shell dumpsys gfxinfo中)"功能,在开启这个功能后,系统就会 ...

  3. android camera 工作原理,Android Camera原理之openCamera模块(一)

    我们平时开发,知道怎么调度api,怎么调起camera,怎么调用camera的实例来操作camera就可以了,但是这些调度的背后都做了什么事情,我们可能不太清楚,本文打算从openCamera这个调用 ...

  4. android广播intent原理,Android中BroadcastReceiver详解

    BroadcastReceiver是什么? Android app可以发送广播也可以接收系统或者其它app发送的广播,是发送/订阅的设计模式.这些广播被发送当重要的事件发生的时候.例如,安卓系统发送广 ...

  5. Android权限管理原理,Android手机Root授权原理细节全解析

    首先关于Root的方式,这里不做详解,可以有很多漏洞,比如利用uid溢出后归为0,得到Root权限,然后操作文件系统等. 手机Root后,最重要的是,给手机安装了su程序和superuser apk. ...

  6. android摄像头自动对焦原理,Android实现手机摄像头的自动对焦

    如何实现Android相机的自动对焦,而且是连续自动对焦的.当然直接调用系统相机就不用说了,那个很简单的.下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦. 代码如下: public c ...

  7. android服务的原理,Android学习笔记:IntentService

    一般我们所使用的Service是运行在主线程当中的,所以在Service里面编写耗时的操作代码,会造成主线程卡顿会ANR.为了解决这样的问题,谷歌引入了IntentService. 如果有一个任务,可 ...

  8. android服务的原理,android service原理

    整体考虑: 两种方式启动服务startService和bindService. startService方式,不需要service返回数据,通过AMS将数据转发给Service即可,异步.简化考虑,A ...

  9. android广告拦截原理,android扫描带有广告应用原理

    突然有了假设四:扫描所有类文件. 仔细想想,如果想得到上面效果,就必须知道你引用了那种广告的类,才肯能判断你加了什么广告. 进一步验证,由于假设三中有一种情况是不add广告的jar包也会被查,果断的反 ...

  10. Android 热修复原理解析

    概述 关联文章 JVM 类加载机制 Android 中的ClassLoader 假如刚发布的版本出现了bug,我们就需要解决bug,并且重新发布新的版本,这样会浪费很多的人力物力,有没有一种可以不重新 ...

最新文章

  1. 关于C#使用Shockwaveflash控件设计器不显示问题的解决方案
  2. 【攻防世界018】Replace
  3. 年月跨度_不畏困难,砥砺前行 ——国内最大跨度管桁架工程成功首滑
  4. python以20字符宽居中输出,Python 字符串内置方法(一)
  5. java saxexception_SAXException
  6. jenkins 手动执行_Jenkins环境配置篇-增加节点
  7. 《大数据——大价值、大机遇、大变革》试读
  8. JVM监控及诊断工具命令行篇之jhat
  9. 在MarkDown的表格中插入代码
  10. excel vba批量发送邮件
  11. matlab-微分方程求解方法汇总
  12. 水平仪算公式计算机,水准仪的使用及计算方法
  13. 请帮我查看一下2.19号邢台发往北京高铁的班次,以及各个班次的时间
  14. Tomcat与JDK版本的对应
  15. LINUX kernel内核各版本下载
  16. 【GStreamer 】1-扫盲介绍
  17. 2020年煤矿安全监测监控新版试题及煤矿安全监测监控试题及答案
  18. go语言开发有哪些工具
  19. 简单弄懂Saas是什么? Saas与传统软件有什么区别?
  20. 微软上海C+AI(OC)

热门文章

  1. 99se 设计4层板的设置方法
  2. 基于安卓手机的WAPI证书安装使用详解
  3. 软考计算机评职称,软考通过后如何评职称?
  4. python中每个if条件后面都要使用冒号_每个if条件后面都要使用冒号
  5. 百会与Zoho达成战略合作,向中国用户推出在线办公套件!
  6. Android优雅地判断软键盘弹出状态
  7. [Java] 使用HttpClient实现文件下载
  8. easyui下拉框和增加以及商品的上架和下架
  9. UltraISO制作win10光盘启动
  10. Rhadoop的安装