android 计步功能原理,Android开发——计步功能
一、使用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开发——计步功能相关推荐
- android theme继承原理,android – 使用Holo父主题从Theme.Light继承editText
所以我的想法是从android:Theme.Holo.Light扩展一个自定义主题(实际上只是一种风格),然后覆盖EditText属性以使用android:Theme中的父设置. 它看起来像andro ...
- android自动帧率原理,Android 帧率计算及优化
在开发者选项中有个" GPU呈现模式分析(Profile GPU rendering,选择在adb shell dumpsys gfxinfo中)"功能,在开启这个功能后,系统就会 ...
- android camera 工作原理,Android Camera原理之openCamera模块(一)
我们平时开发,知道怎么调度api,怎么调起camera,怎么调用camera的实例来操作camera就可以了,但是这些调度的背后都做了什么事情,我们可能不太清楚,本文打算从openCamera这个调用 ...
- android广播intent原理,Android中BroadcastReceiver详解
BroadcastReceiver是什么? Android app可以发送广播也可以接收系统或者其它app发送的广播,是发送/订阅的设计模式.这些广播被发送当重要的事件发生的时候.例如,安卓系统发送广 ...
- Android权限管理原理,Android手机Root授权原理细节全解析
首先关于Root的方式,这里不做详解,可以有很多漏洞,比如利用uid溢出后归为0,得到Root权限,然后操作文件系统等. 手机Root后,最重要的是,给手机安装了su程序和superuser apk. ...
- android摄像头自动对焦原理,Android实现手机摄像头的自动对焦
如何实现Android相机的自动对焦,而且是连续自动对焦的.当然直接调用系统相机就不用说了,那个很简单的.下面我们主要来看看如如何自己实现一个相机,并且实现自动连续对焦. 代码如下: public c ...
- android服务的原理,Android学习笔记:IntentService
一般我们所使用的Service是运行在主线程当中的,所以在Service里面编写耗时的操作代码,会造成主线程卡顿会ANR.为了解决这样的问题,谷歌引入了IntentService. 如果有一个任务,可 ...
- android服务的原理,android service原理
整体考虑: 两种方式启动服务startService和bindService. startService方式,不需要service返回数据,通过AMS将数据转发给Service即可,异步.简化考虑,A ...
- android广告拦截原理,android扫描带有广告应用原理
突然有了假设四:扫描所有类文件. 仔细想想,如果想得到上面效果,就必须知道你引用了那种广告的类,才肯能判断你加了什么广告. 进一步验证,由于假设三中有一种情况是不add广告的jar包也会被查,果断的反 ...
- Android 热修复原理解析
概述 关联文章 JVM 类加载机制 Android 中的ClassLoader 假如刚发布的版本出现了bug,我们就需要解决bug,并且重新发布新的版本,这样会浪费很多的人力物力,有没有一种可以不重新 ...
最新文章
- 关于C#使用Shockwaveflash控件设计器不显示问题的解决方案
- 【攻防世界018】Replace
- 年月跨度_不畏困难,砥砺前行 ——国内最大跨度管桁架工程成功首滑
- python以20字符宽居中输出,Python 字符串内置方法(一)
- java saxexception_SAXException
- jenkins 手动执行_Jenkins环境配置篇-增加节点
- 《大数据——大价值、大机遇、大变革》试读
- JVM监控及诊断工具命令行篇之jhat
- 在MarkDown的表格中插入代码
- excel vba批量发送邮件
- matlab-微分方程求解方法汇总
- 水平仪算公式计算机,水准仪的使用及计算方法
- 请帮我查看一下2.19号邢台发往北京高铁的班次,以及各个班次的时间
- Tomcat与JDK版本的对应
- LINUX kernel内核各版本下载
- 【GStreamer 】1-扫盲介绍
- 2020年煤矿安全监测监控新版试题及煤矿安全监测监控试题及答案
- go语言开发有哪些工具
- 简单弄懂Saas是什么? Saas与传统软件有什么区别?
- 微软上海C+AI(OC)