最近看了一篇文章,有关程序员身体健康的,然后自己就下载了两个有关运动的应用监督一下自己;这些应用有许多的产品共性,比如社交。除此而外了,就是记步这个小功能,除了它们,包括支付宝,微信等都有相关小功能,于是就简单看了相关的API使用。

在说之前,我先说一下本篇主要针对Android4.4及以上且有记步传感器的机型。其实,关于几步这一块,Android应用层接口提供的就是读取传感器数据的接口。计步的实现和数据都是保存在SensorEvent中的。下面就来看看使用步骤,这里我们主要参照官方API使用方式,有兴趣看一下官方Android传感器使用介绍。

1,使用步骤

  • 第一步:确认设备是否支持记步功能(是否有记步传感器),这里可以通过传感器Manager调用获取Sensor列表接口查看
 
  1. manager = (SensorManager) getSystemService(SENSOR_SERVICE);

  2. List<Sensor> list=manager.getSensorList(Sensor.TYPE_ALL);

  3. for(Sensor sensor:list){

  4. Log.e(TAG, "initData: "+sensor.getName() );

  5. }

如果日志有下面传感器日志,表示支持:

  • 第二步:创建传感器管理者,通过传感器管理者获取计步传感器实例
 
  1. manager = (SensorManager) getSystemService(SENSOR_SERVICE);

  2. stepSensor = manager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

  • 第三步:注册计步传感器监听
manager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_NORMAL);
  • 第四步:实现监听器回调接口方法,处理我们自己的逻辑
 
  1. @Override

  2. public void onSensorChanged(SensorEvent event) {

  3. if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {

  4. //event.values[0]为计步历史累加值

  5. Log.e(TAG, "onSensorChanged: 当前步数:" + event.values[0]);

  6. if(sensorTotalStep==0){

  7. sensorTotalStep= (long) event.values[0];

  8. todayStep=0;

  9. }

  10. else {

  11. todayStep= (long) (event.values[0]-sensorTotalStep);

  12. }

  13. }

  14. }

2,调用示例

上面就是针对计步传感器数据实时获取的一种实现,其他传感器也是类似的;我这里完全是参照官网调用方式实现的;线面就来看看官网调用的一个加速度传感器和我调用的计步传感器的实现,你会发现除了接口名称不一样,其他都是一样的。

  • 官网加速度传感器:
 
  1. public class SensorActivity extends Activity implements SensorEventListener {

  2. private final SensorManager mSensorManager;

  3. private final Sensor mAccelerometer;

  4. public SensorActivity() {

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

  6. mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

  7. }

  8. protected void onResume() {

  9. super.onResume();

  10. mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

  11. }

  12. protected void onPause() {

  13. super.onPause();

  14. mSensorManager.unregisterListener(this);

  15. }

  16. public void onAccuracyChanged(Sensor sensor, int accuracy) {

  17. }

  18. public void onSensorChanged(SensorEvent event) {

  19. }

  20. }

  • 我的计步传感器:
 
  1. public class MainActivity extends AppCompatActivity implements SensorEventListener{

  2. SensorManager manager;

  3. Sensor stepSensor;

  4. @Override

  5. protected void onCreate(Bundle savedInstanceState) {

  6. super.onCreate(savedInstanceState);

  7. setContentView(R.layout.activity_main);

  8. initData();

  9. }

  10. private void initData() {

  11. manager = (SensorManager) getSystemService(SENSOR_SERVICE);

  12. stepSensor = manager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

  13. }

  14. @Override

  15. public void onSensorChanged(SensorEvent event) {

  16. if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {

  17. Log.e(TAG, "onSensorChanged: 当前步数:" + event.values[0]);

  18. }

  19. }

  20. @Override

  21. public void onAccuracyChanged(Sensor sensor, int accuracy) {

  22. }

  23. @Override

  24. protected void onResume() {

  25. super.onResume();

  26. manager.registerListener(this, stepSensor, SensorManager.SENSOR_DELAY_NORMAL);

  27. }

  28. }

我们从event.value[0]可以取出从开机到现在计步传感器累计记录的步数,这个数据在设备关机后置0,所以我们可以根据数据以及这些特性做一些处理,时间一个基本的计步功能。结合几个需要特别注意的点,我画了一个图,实现图中的描述基本上就可以完成一个计步功能。

下面结合上图简单的说明一下,我们主要看功能的组成部分和几种特殊的情况。

  • 功能组成部分主要包括一个维护数据的服务,一个系统计步Sensor和若干和服务进行数据交互的UI
  • 关键点描述:

(1)关机:上面也说了,关机的时候,计步传感器中的数据会清除,所以,我们需要自己维护和保存关键前的数据,主要包括传感器中的总步数和今天已经行走的步数

(2)开机:开机维护数据服务启动,恢复保存的数据,监听计步传感器实时更新数据

(3)跨天:现在的应用基本上都有今天的步数,所以就有一个跨天的数据统计。所以我们需要在服务中单独开一个线程做跨天检验或者更简单的一种做法是在读取传感器数据时做跨天校验;但是这两种做法开销都有点大;我们可以通过每天第一次读取计步传感器数据的时候计算出今天结束还需要多久,然后创建一个延迟任务来更新数据。到这里,关于计步的简单实现就介绍完了。

附:SensorEvent介绍:

This class represents a Sensor event and holds information such as the sensor's type, the time-stamp, accuracy and of course the sensor's data.

注:欢迎扫码关注

Android官方记步API基本使用相关推荐

  1. 智能手机android下的记步器的实现

    随着智能手机的普及,各种应用也随之出现.我们实现了一个基于android的记步器,可以对一些需要锻炼的人有个好的提醒,并建立了后台服务器,把用户的锻炼的信息上传到网络上,随时查看. 开发界面如下图所示 ...

  2. Android记步(运动)应用

    Android记步(运动)应用 现如今随着人们对身体健康的追求,人们开始争先恐后的运动,而本文就是利用Android技术,编写一个运动记步数的应用(如有转载,请表明作者). 一.使用Android内置 ...

  3. android官方文档翻译,Android API Guide:Search 中文翻译

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 搜索,是安卓的一个核心功能.用户可以搜索他们所有能获得的数据,无论这些内容在设备上或者在网络上. Search Over ...

  4. 基于Android的计步器(Pedometer)的讲解(四)——后台记步

    今天先不说Pedometer(计步器)项目UI方面的了,今天讲一个基于重力加速度的记步功能传感器(Sensor),然后 在后台开启记步. 计步器(Pedometer)整个项目的源代码,感兴趣的朋友可以 ...

  5. iPhone记步和Android计步,手机中运动步数是如何计算的?

    微信运动每天都记录着你走路的步数,他会形成榜单,走的多收到很多赞,走的少则无人关注,如果你走到第一,你的照片将霸占排行榜封面. 所以一段时间,每个人为了霸占封面疯狂走路.刷步,然而有时我们却发现你跟好 ...

  6. Android官方SDK下载(含API文档)

    下载Android官方SDK文档的方法: 1.昨天我按照方法二下好了一份,大家可以直接下载:http://yunpan.cn/cy7NNkgfUbfDr (提取码:6075) (如果链接失效,请提醒我 ...

  7. Android 官方架构组件 Navigation 使用详解

    前言 前段时间,我在做项目开发的时候对Fragment的管理遇到几个小问题,总觉得在现阶段封装好的Fragment管理器不太优雅.这成为我下决心学习Jetpack在很早之前推出的Navigation库 ...

  8. Android官方文章翻译之管理设备苏醒状态(Managing Device Awake State)(二)

    这是Managing Device Awake State的下半篇,上半篇请看:Android官方文章翻译之管理设备苏醒状态(Managing Device Awake State)(一) 在了解接下 ...

  9. 2022年Android官方模拟器安装Xposed教程+测试工具PatDroid安装教程

    碎碎念:截至笔者写此教程的2022.10.10,xposed官网貌似已经G了(?),网上有的教程已经过时,有的是针对奇怪的商用的Android模拟器的教程(以科研工作者的角度来说),在此环境下出一篇A ...

最新文章

  1. Error:(1, 0) Your project path contains non-ASCII characters.
  2. 怎么让手机变成震动器_详解iPhone 手机标配的两种技术:线性马达和3Dtouch,有多好用?...
  3. oracle的存储设置默认参数,oracle初始化参数设置
  4. Memcache监控小工具stats命令
  5. Flash Video带宽估测
  6. django基础 第一章 环境搭建
  7. python解释器安装过程
  8. cad立面索引符号 规范_园林景观设计规范,你不可或缺的真干货
  9. 中超16强内援转会更新 陕西重金打造中国银河战舰
  10. 如何搜索英文文献综述?
  11. 大数据资源争夺战此起彼伏 对用户而言是福是祸?
  12. 计算机专业兴趣小组 名字,计算机人兴趣小组口号
  13. python爬虫(9)获取动态搞笑图片
  14. 7-1 sdut-循环-7-统计正数和负数的个数(II) (10 分)
  15. python马尔可夫链_[译] 用 Python 实现马尔可夫链的初级教程
  16. 《土地公婆》钟久夫邓天晴演绎梁祝爱情
  17. 【splay】BZOJ 1152 3506:[cqoi2014]排序机械臂
  18. java opengl es_OPENGL ES 3.0编程指南
  19. 非项目活动的时间怎么跟踪?
  20. 大咖专访:Bigbang公链创始人“一休”现场解决实际技术问题

热门文章

  1. ct检查床的移动精度是指_CT检查床水平移动设计精度不大于
  2. java purge_Java ThreadPoolExecutor.purge方法代码示例
  3. getBoundingClientRect offsetWidth offsetHeight
  4. 诺基亚—成也塞班,败也塞班
  5. 为什么程序员这么讨厌被人问「会不会修电脑」?
  6. Linux应用程序开发经验
  7. ElasticSearch:Request cannot be executed; I/O reactor status: STOPPED
  8. 分析一下微应用框架(一)
  9. npm 安装使用以及详细介绍
  10. 判断NP完全问题的一些蛛丝马迹